React Native özelliğini kullanarak bir mobil uygulama yapıyorum ve dahil edilen bileşen bileşenleri bunun için yeterince yüksek performansa sahip olmadığından, Android'in RecyclerView öğesini liste bileşeni olarak kullanmaya başladım. Bununla birlikte bir sorun var. RecyclerView, kaydırılan veya RecyclerView'ın boyutunu değiştirene kadar içerik görünümlerini güncellemez. Bu soruna neden ve onu nasıl düzeltebilirim? BenDatasetChanged, notifyItemChanged, forceLayout, geçersiz kılma, postInvalidate ve her biri ile çok farklı varyasyonları bildirmeyi denedim.Ürünü içe aktarma içerisindeki görünümü görmek için Android RecyclerView'ı kullanma React Yerel bileşen
cevap
bu bir this.setIsRecyclable(true);
O görüşlerinizi referesh olacaktır deneyin
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();
}
}
}
}
Tüm ViewHolders'lara this.setIsRecycleable (true) eklemeyi denedim ancak maalesef bu, görünümlerimin yenilenmesini sağlamıyor. – Vaintti
mSingleListItemAdapter = new SingleListItemAdapter (mSingleItemLists); mRecyclerView.setAdapter (mSingleListItemAdapter); Yeniden yönlendirmeyi istediğiniz yere yeniden yerleştirmeyi deneyin. –
Bu görünüm ilk kez görüntülenmez ve listenin başlangıcına ve buna benzer şekilde atlamalara neden olur. – Vaintti
ihtiyaçlarınızı tatmin flatlist değil mi, ve bu sayfayı gördük https://facebook.github.io/react- native/docs/virtualizedlist.html # virtualizedlist? Flatlist sanallaştırılmış listeden miras alır, 'data' öğelerinizi hazırlamaya çalışın PureComponent – eden
Düz listeyi kullanmayı denedim ancak performansı amacım için yeterince iyi değil. Binlerce öğeden veri kullanıldığında oldukça yavaş oluyor. – Vaintti
Liste öğelerinizi Pure Component yapmayı denediniz mi? – eden