在listView android中设置Strikethrough文本

时间:2012-11-30 12:22:01

标签: android listview

当用户单击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");
                        }
                    }

                  });

任何人都知道扫管笏是我的错误吗?

2 个答案:

答案 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));
 }