2013/03/18

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

穀風: onListItemClick() の中で isChecked() を呼んではいけない? というエントリを書きましたが、同様に OnItemClickListener.onItemClick() の中ではどうなのか、調べてみました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 件のコメント: