8

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

+0

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

+0

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

+0

Liste öğelerinizi Pure Component yapmayı denediniz mi? – eden

cevap

1

enter image description here 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(); 
      } 
     } 
    } 

} 
+0

Tüm ViewHolders'lara this.setIsRecycleable (true) eklemeyi denedim ancak maalesef bu, görünümlerimin yenilenmesini sağlamıyor. – Vaintti

+0

mSingleListItemAdapter = new SingleListItemAdapter (mSingleItemLists); mRecyclerView.setAdapter (mSingleListItemAdapter); Yeniden yönlendirmeyi istediğiniz yere yeniden yerleştirmeyi deneyin. –

+0

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