私のRecyclerViewAdapter
; RecyclerView
のリスト項目のレイアウトに変更が加えられた場合、それはしばらくの間繰り返されます。 RecyclerViewAdapterの内部クラスViewHolder
では、mainLayout
というレイアウトのonClickListener
をリスト項目に設定しました。これをクリックすると、同じリスト項目の別のレイアウトexpandableLayout
が展開されます。クリックすると、希望するアイテムが展開されるだけでなく、の11アイテムに1アイテムずつのアイテムが展開されます。テキストの色を変更するなどの単純なレイアウトの変更にも同じです。私はしばらくの間、この問題に引っかかっていRecyclerViewでアイテムのレイアウト変更が繰り返されるのを避けるにはどうすればいいですか?
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private Context mContext;
private ViewPager mViewPager;
private DataManager mDataManager;
public RecyclerViewAdapter(RecyclerView.LayoutManager layoutManager, Context context, ViewPager viewPager) {
this.mContext = context;
this.mViewPager = viewPager;
this.mDataManager = new DataManager(mContext, mViewPager);
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
FrameLayout mainLayout;
RelativeLayout editButton;
RelativeLayout deleteButton;
ExpandableLayout expandableLayout;
//Defined other View's of the item
ViewHolder(View listItemLayout) {
super(listItemLayout);
this.mainLayout = listItemLayout.findViewById(R.id.listItem_mainLayout);
this.editButton = listItemLayout.findViewById(R.id.expandedLogItem_edit);
this.deleteButton = listItemLayout.findViewById(R.id.expandedLogItem_delete);
this.expandableLayout = listItemLayout.findViewById(R.id.listItem_expandableLayout);
this.mainLayout.setOnClickListener(this);
this.editButton.setOnClickListener(this);
this.deleteButton.setOnClickListener(this);
//Initialized other View's of the item.
}
@Override
public void onClick(View view) {
if (view.getId() == mainLayout.getId()) {
expandableLayout.toggle();
//This expands or collapses not just the clicked item,
//but every item once in 11 items.
//I tried other things like changing the text color
//of a TextView, and the result is the same.
} else if (view.getId() == editButton.getId()) {
mDataManager.editItemAt(getAdapterPosition());
} else if (view.getId() == deleteButton.getId()) {
mDataManager.deleteItemAt(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
}
}
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View listItemLayout = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_list_item, parent, false);
return new ViewHolder(listItemLayout);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
//Populating other View's of the item.
}
@Override
public int getItemCount() {
return logList.size();
}
}
、および検索またはこれを解決するための任意の方法を考えることができませんでした:
はここRecyclerViewAdapterです。どんな反応も高く評価されます。
項目から 'View'に' onClickListener() 'を設定しないのはなぜですか?背景画像があり、 'holder.that_image_view.setOnClickListener() 'のようなonBindViewHolder()でリスナーを設定するとします。 –
実際に問題を解決するために現在のものに変更しました。また働いていませんでした。 –
あなたは正しいです、A. Kuckhinkeの答えで、私はリスナーを 'onBindViewHolder()'に移動しました、ありがとうございます。 –