当用户单击listView中的复选框时,我想在文本中设置strikethough。假设我在listView中有三个项目,但是当我单击第一个项目中的复选框时,它只在最后一个项目的文本中删除了。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listView = (ListView) findViewById(R.id.productList);
model = helper.getAllProduct(list);
startManagingCursor(model);
listView.setAdapter(new ShoppingListAdapter(this,model));
class ShoppingListAdapter extends ResourceCursorAdapter {
public ShoppingListAdapter(Context context ,Cursor c) {
super(context,R.layout.productrow,c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View row, Context context, Cursor c) {
// TODO Auto-generated method stub
listName = (TextView) row.findViewById(R.id.produtName);
final CheckBox listCheck=(CheckBox)row.findViewById(R.id.check);
listCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
// TODO Auto-generated method stub
if(listCheck.isChecked()){
listName.setPaintFlags(listName.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
//listName.setTextColor(_context.getResources().getColor(R.color.red));
// listName.setText("go");
}
}
});
任何人都知道扫管笏是我的错误吗?
答案 0 :(得分:3)
尝试
listName.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
它适用于我的情况。
答案 1 :(得分:1)
Lalit Poptani是正确的,因为listview的回收机制。滚动列表时,已经创建的视图将被重用。同时将调用滚动的getview()方法。所以你必须检查是否选中了复选框。如果选中它你必须设置绘制标志而不是意味着你必须删除油漆标志。
if(isChecked){
txtview.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
}else{
txtview.setPaintFlags( task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
}