我创建了一个应用程序,我想在其中执行一项任务,例如添加值并通过单击按钮减小值。它工作正常,但我面临的问题是,当我在滚动列表视图然后值为零。
但是当我点击增加按钮或减少按钮时,它会给我真正的价值。
即:当我加2个数量。点击。
当我滚动页面时它会变为0,当我点击addButton时它会给我3个。
或者当我滚动页面时它会变为0,当我点击减去按钮时它会给我1
当我滚动它时,TextView displayInteger被丢弃并忘记它的值。
这里有完整的代码: -
listViewadapter.java
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
TextView mname , pmethod2, pamount3, premark4;
final ImageView increase,decrease;
final Button add;
inflater = (LayoutInflater) cntx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(cntx);
convertView = inflater.inflate(R.layout.raw_order, parent,
false);
decrease = (ImageView) convertView.findViewById(R.id.decrease);
increase= (ImageView) convertView.findViewById(R.id.increase);
add= (Button) convertView.findViewById(R.id.add);
mname = (TextView) convertView.findViewById(R.id.mname);
mname.setText(" " + o_aproduct.get(position));
final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number);
//add.setText(" " +count);
increase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int count = sia.get(position);
count= count + 1;
sia.put(position, count);
displayInteger.setText("" + count);
add.setText(" " +count);
if (count > 0 ) { decrease.setEnabled(true); }
}
});
decrease.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int count = sia.get(position);
count= count- 1;
sia.put(position, count);
displayInteger.setText("" + count);
add.setText(" " +count);
if (count > 0 )
{decrease.setEnabled(true);}
else if (count == 0 ){
decrease.setEnabled(false);
}
else { decrease.setEnabled(false);}
}
});
return convertView;
}
答案 0 :(得分:1)
使用ListView
(或RecyclerView
),您的事件侦听器永远不应更改视图。
事件侦听器应更新模型,然后调用notifyDataSetChanged()
。 notifyDataSetChanged()
告诉ListView
从您更新的模型中刷新。
仅从getView()
内直接更改视图。
final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number);
int count = sia.get(position);
displayInteger.setText("" + count);
decrease.setEnabled(count > 0);
increase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int count = sia.get(position);
count++;
sia.put(position, count);
notifyDataSetChanged();
}
});
decrease.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int count = sia.get(position);
count--;
sia.put(position, count);
notifyDataSetChanged();
}
});