Я делаю мобильное приложение с использованием React Native, и включенные компоненты списка не имеют достаточно высокой производительности для него, поэтому я начал использовать Android RecyclerView в качестве компонента списка. Хотя с этим есть проблема. RecyclerView не обновляет представления своего содержимого, пока я не прокрутлю или не изменю размер RecyclerView. Что может вызвать эту проблему и как я могу это исправить? Я пробовал notifyDatasetChanged, notifyItemChanged, forceLayout, invalidate, postInvalidate и множество различных вариантов каждого из них.
Получение Android RecyclerView для обновления представления внутри компонента React Native
Ответы (1)
Попробуйте это
this.setIsRecyclable(true);
Это будет ссылаться на ваши взгляды
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ArrayList<String> mSingleItemLists = new ArrayList<>();
private SingleListItemAdapter mSingleListItemAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_single_item);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
setDummyData();
}
private void setDummyData() {
for (int i = 0; i <= 30; i++)
mSingleItemLists.add("item" + i);
}
@Override
protected void onResume() {
super.onResume();
mSingleListItemAdapter = new SingleListItemAdapter(mSingleItemLists);
mRecyclerView.setAdapter(mSingleListItemAdapter);
}
class SingleListItemAdapter extends RecyclerView.Adapter<SingleListItemAdapter.SingleListItemHolder> {
private ArrayList<String> mSingleItemLists;
private SingleListItemAdapter(ArrayList<String> singleItemLists) {
mSingleItemLists = singleItemLists;
//You can do notifydatasetchange if u r having any saved value
}
@Override
public SingleListItemAdapter.SingleListItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflatedView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_recyclerview, parent, false);
return new SingleListItemHolder(inflatedView);
}
@Override
public void onBindViewHolder(SingleListItemAdapter.SingleListItemHolder holder, int position) {
holder.mItemDate.setText(mSingleItemLists.get(position));
}
@Override
public int getItemCount() {
return mSingleItemLists.size();
}
class SingleListItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView mItemDate;
SingleListItemHolder(View v) {
super(v);
mItemDate = (TextView) v.findViewById(R.id.textview_recycler_list_item);
v.setOnClickListener(this);
this.setIsRecyclable(true); // This will help u
}
@Override
public void onClick(View v) {
//do your stuff
notifyDataSetChanged();
}
}
}
}
person
Amjad Khan
schedule
20.09.2017
Я попытался добавить this.setIsRecycleable(true) ко всем моим ViewHolder, но, к сожалению, это не привело к обновлению моих представлений.
- person Vaintti; 21.09.2017
mSingleListItemAdapter = новый адаптер SingleListItem(mSingleItemLists); mRecyclerView.setAdapter (mSingleListItemAdapter); Попробуйте установить это снова, где вы хотите сослаться
- person Amjad Khan; 21.09.2017
Это не работает в первый раз, когда обновляется представление и вызывает переход к началу списка и тому подобное.
- person Vaintti; 22.09.2017
Я добавил изображение, также вы можете проверить
- person Amjad Khan; 23.09.2017
data
элементы PureComponent - person eden   schedule 17.09.2017