1

カスタムアダプターを備えたlistViewがあります。選択時に listView アイテムの背景色を変更しました。これは、Samsung Galaxy S2 の Ice Cream Sandwich 4.0.4 とエミュレータの ICS 4.0.3 で完全に動作します。ただし、4.2.2 JellyBean エミュレーターでは動作しません。JB では、項目を選択すると背景が以前のままになります。

これは、アイテムが選択されたときに背景色を設定するためのロジックがあるコードの一部です。

private int mItemIndex = -1;

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;           
        ....

        if (convertView == null) {
            ....
            ....

        } else {
            /* To highlight the selected item */
            if (position == mItemIndex) {
                convertView.setSelected(true);
                convertView.setPressed(true);
                convertView.setBackgroundColor(context.getResources().getColor(R.color.SkyBlue));
            } else {
                convertView.setSelected(false);
                convertView.setPressed(false);
                convertView.setBackgroundColor(context.getResources().getColor(R.color.WhiteSmoke));
            }
            /* To highlight the selected item - end */

            ....
            ....

        return v;
    }

あるいは、 convertView.setBackgroundResource(context.getResources().getColor(R.color.SkyBlue));setBackgroundColor の代わりに試してみましたが、うまくいきませんでした。

これを Jellybean で動作させるための回避策はありますか? または、コードに何か不足していますか?

ありがとう。

4

1 に答える 1

0

選択と非選択の 2 つの異なる状態イメージを持つカスタム セレクターを取得します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/pause_button"
          android:state_selected="true" />
    <item android:drawable="@drawable/play_button" />
</selector>

1.アクティビティにグローバル変数を作成する

View previous;(リスト行のビューグループを取ります)

そして、あなたの onCreate メソッドで setContentView の後にこのように初期化します

previous=new View(context);

そして、listViewのonItemClickリスナーでこのようにします

list.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View view,
                        int arg2, long arg3) {
                    view.setSelected(true);
                                       previous.setSelected(false);
                                        previous=current;
                }
            });
于 2013-03-23T15:20:26.167 に答える