I am making a mobile application using React Native and included list components didn't have high enough performance for it so I started using Android's RecyclerView as the list component. There is a problem though with it. The RecyclerView doesn't update its contents views until I scroll or change RecyclerView's size. What could cause this problem and how I can fix it? I have tried notifyDatasetChanged, notifyItemChanged, forceLayout, invalidate, postInvalidate and many different variations with each.
1 Answer
Try this one this.setIsRecyclable(true);
It will referesh your views
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(); } } } } 4 Comments
Vaintti
I tried to add this.setIsRecycleable(true) to all of my ViewHolders but unfortunately that didn't make my views to refresh.
Amjad Khan
mSingleListItemAdapter = new SingleListItemAdapter(mSingleItemLists); mRecyclerView.setAdapter(mSingleListItemAdapter); Try set this again where u want to referesh
Vaintti
That doesn't work first time the view updates and causes jumping to beginning of the list and such.
Amjad Khan
I have added Image also u can check
dataitems PureComponent