2017-05-25 132 views
1

在RecyclerView中使用一個網格佈局,我觀察到每當我在屏幕上移動4-5個項目時項目會改變位置,我實現了一個onclick,以便它進入另一個頁面RecyclerView GridLayoutManager隨機移動位置的項目

public interface ItemClickCallback { 
    void onItemClick(int p, String id); 

} 

public void setItemClickCallback(final ItemClickCallback itemClickCallback) { 
    this.itemClickCallback = itemClickCallback; 

} 

public nAdapter(RealmResults<Nitem> listData, Context c) { 
    inflater = LayoutInflater.from(c); 
    this.listData = listData; 
} 


@Override 
public nHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.n_item, parent, false); 
    return new nHolder(view); 
} 

@Override 
public void onBindViewHolder(nAdapter.nHolder holder, final int position) { 
    final Nitem item = (Nitem) listData.get(position); 
    holder.title.setPadding(7,7,7,7); 
    if(holder.title.toString().isEmpty()) { 
     holder.title.setText(item.getNotes()); 
    } 
     holder.container.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      itemClickCallback.onItemClick(position,item.getId()); 
     } 
    }); 

} 

回答

0

RecyclerView中的視圖被重用。

這意味着,當您向上或向下滾動列表時,而不是創建全新的視圖,以前創建的視圖將被重用。

隱含地,它強制您一次又一次更新視圖內容(不僅在您期待它爲空時)。

也許你有錯誤的標題問題?它的出現是因爲你只設置標題,當它是空的時(只有少數尚未緩存的視圖纔是真實的)。

只要刪除if條件,你應該沒問題。

@Override 
public void onBindViewHolder(nAdapter.nHolder holder, final int position) { 
    final Nitem item = (Nitem) listData.get(position); 
    holder.title.setPadding(7,7,7,7); 
    // Always update view's data. 
    holder.title.setText(item.getNotes()); 
    holder.container.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      itemClickCallback.onItemClick(position,item.getId()); 
     } 
    }); 
} 
+0

刪除了if語句並且沒有更改,是否有助於我使用realm作爲其數據庫 –

相關問題