我有一个带有RecyclerView的片段,其中包含一些数据记录。每个记录都是“组合”特殊产品(芽灯,米勒灯,金枪鱼三明治等)的一部分。基本上,顾客正在为组合选择产品(6种国产啤酒,2种三明治和1种饮料等)。每种产品都有一套“产品分组”(国内啤酒,啤酒,三明治,午餐等)。在每个项目旁边,我有一个加号和减号按钮,用于在购物车中添加/减去商品。在我的适配器内,我需要检查客户是否选择了他所有的“国产啤酒”或他的两个“三明治”。如果某些组数量总计值超过了组合中允许的组总数,我需要禁用这些项目的添加按钮。
ComboItemsAdapter.java
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
...
itemHolder.tvQuantity.setText("0");
...
itemHolder.buy_subtract_button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
...
checkTotals();
}
}
itemHolder.buy_add_button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
...
checkTotals();
}
}
}
private void checkTotals(){
//here I want to check some stuff, and if that stuff is true I want to disable all the buttons in that viewholder, some buttons will be disabled, some won't
}
所以我的问题是在checkTotals()函数中迭代我的recyclerview / adapter中的每一行并禁用相应按钮的最佳方法是什么?
答案 0 :(得分:0)
将itemHolder传递给checkTotal()函数,在该函数下,执行条件语句以启用或禁用单击。
答案 1 :(得分:0)
实际上检查病情的最佳位置是var str = 'EPA shuts down program helping states adjust to climate change http://hill.cm/FH2iWpq Which url is lowercased dummy text';
var regex = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/g;
str.split(" ").forEach(function (obj) {
if(obj.match(regex) === null) {
obj = obj.toLowerCase();
}
console.log(obj);
})
本身!
由于您要根据某些条件调整每个onBindViewHolder
的{{1}},因此您必须在UI
中执行此操作;因为它是在回收行并将为其分配新数据时调用的方法..
PS:但是请注意,不建议在row
内进行复杂计算,因为此方法必须尽快执行,如果您的条件是复杂的,请在适配器构造函数中执行并缓存结果每一行..稍后根据结果调整onBindViewHolder
内的视图。