2013/03/18

OnItemClickListener.onItemClick() の中で isChecked() を呼んではいけない?

穀風: onListItemClick() の中で isChecked() を呼んではいけない? というエントリを書きましたが、同様に OnItemClickListener.onItemClick() の中ではどうなのか、調べてみました。
public class MainActivity extends ListActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[] listItems = { "1", "2", "3" };

        getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        ListAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, listItems);
        setListAdapter(adapter);

        getListView().setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView cv = (CheckedTextView) view;
                Log.d(TAG, "isChecked " + cv.isChecked());
            }
        });
    }
}

これを、Android 4.0.4 のエミュレータで動作させると以下の通り
// OFF → ON
isChecked false

// ON → OFF
isChecked true

Android 4.2 のエミュレータで動作させると以下の通り
// OFF → ON
isChecked true

// ON → OFF
isChecked false

やはり逆転してしまいました。
先程も書いたとおり、とりあえずの対策は出来ると思いますが、正しい対処方法がわかりません…

0 件のコメント: