0

当用户单击 listView 中的复选框时,我想在文本中设置删除线。假设我在 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");
                        }
                    }

                  });

有人知道这是我的错吗?

4

2 回答 2

3

尝试

listName.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

它在我的情况下有效。

于 2012-11-30T12:45:44.427 回答
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));
 }
于 2012-11-30T18:27:28.250 回答