Jam*_*mes 5 android for-loop android-studio android-recyclerview
我有一个 CardViews 的 RecyclerView。我试图在您单击 CardView 之一的地方使用它,它会更改该 CardView 的背景。这部分有效。我被卡住的地方是试图将所有其他 CardViews 改回白色,这样看起来就不会选择多个。
我觉得最好的方法是 for 循环,但我似乎无法找到 for 循环应该是什么。我也尝试重置所有 CardViews,notifyDataSetChanged()但这也不起作用。
这是我的onItemClicked()功能(正常工作):
mAdapter = new TransferCard(list, getContext(), new TransferCard.OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
//What code goes here to change all Views in the RecyclerView to have a background of white
RelativeLayout temp = v.findViewById(R.id.cardForeground);
item = list.get(position);
temp.setBackgroundColor(getResources().getColor(R.color.selected));
}
});
Run Code Online (Sandbox Code Playgroud)
这是我onCreateViewHolder()的setOnTouchListener()活动地点。
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.transfer_card, parent, false);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(v, parent.indexOfChild(v));
}
});
return new MyViewHolder(itemView);
}
Run Code Online (Sandbox Code Playgroud)
似乎我就在那里,但我需要知道如何处理 for 循环。
通常,您应该以这样一种方式编写您的适配器,onBindViewHolder()即您可以修改视图的唯一位置。对于您想要做的事情,我认为最简单的方法是跟踪最后点击的位置,然后onBindViewHolder()根据其位置是否等于最后点击的位置将背景设置为黑色或白色。
@Override
public void onItemClick(View v, int position) {
lastTappedPosition = position;
mAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (position == lastTappedPosition) {
// set color selected
} else {
// set color unselected
}
...
}
Run Code Online (Sandbox Code Playgroud)
您可以通过仅通知适配器旧的点击位置和新的点击位置已更改(这样您就不必重新绑定每个视图)来改进这一点,但为了简单起见,我保持原样.
小智 6
for (int x = recyclerView.getChildCount(), i = 0; i < x; ++i) {
ViewHolder holder = recyclerView.getChildViewHolder(recyclerView.getChildAt(i));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9277 次 |
| 最近记录: |