2017-05-25 19 views
1

RecyclerViewのgridlayoutを使用すると、画面上に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文が削除され、変更されていないため、データベースとして領域を使用するのに役立ちますか –

関連する問題