0

ユーザーがlistView内のチェックボックスをクリックしたときにテキストでストライクスルーを設定したい。listView内に3つのアイテムがあると仮定しますが、最初のアイテムのチェックボックスをクリックすると、最後のアイテムのテキストでのみストライクスルーします。

    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は正しいですが、それはリストビューのリサイクルメカニズムによるものです。リストをスクロールしている間、すでに作成されたビューが再利用されます。スクロール中に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 に答える