所需的結果RecyclerView:給出錯誤的位置的onClick自定義行
保持滾動位置,並就自定義行的特定視圖右側位置的特定視圖。
我正在使用RecyclerView,其中我試圖在列表的開頭以及列表的末尾添加Demand Data。
通過滾動底部獲取數據是完美的。
但有問題如下滾動頂部:在適配器的onBindViewHolder
- 集點擊收聽。
- 設置Recyclerview的OnItemTouchListener中的單擊偵聽器。
這裏的例子:當我向上滾動列表
,然後它加載15個數據,並把它添加到列表的頂部。 我們的目標是保持滾動位置。 可通過
adapter.notifyItemRangeInserted(0, stringArrayListTemp.size());
實現但問題是當我在任何項目上點擊無需滾動查看,然後的OnClickListener給錯誤的位置。 您可以檢查適配器的方法:
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
String item = moviesList.get(position);
holder.title.setText(item);
holder.title.setTag(position);
holder.title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("onClick", "stringArrayList position: " + moviesList.get(position) + " - view position: " + moviesList.get((int) view.getTag()));
}
});
}
但在Recyclerview的addOnItemTouchListener同時採用getTag給出正確的位置stringArrayList.get(position)
但給錯了位置。
mRecyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Log.e("onItemClick", "stringArrayList position: "+stringArrayList.get(position)+ " - view position: "+stringArrayList.get((int)view.getTag()));
}
}));
當我嘗試通過以下方法在列表開始處添加數據時,我得到了確切的問題。
// retain scroll position and gives wrong position onClick
adapter.notifyItemRangeInserted(0, stringArrayListTemp.size());
// does not retain scroll position, scroll to top & gives right position onClick
//adapter.notifyDataSetChanged();
因爲它製造更多混亂取下問題不必要的代碼。只發布你準確得到問題的部分。 –