0

私はこれを持ってSelectorlistSelectorますListView。さらにListViewでは、

android:choiceMode="singleChoice"
android:listSelector="@drawable/list_selector"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent" 

ユーザーが のいずれかのアイテムに触れているときは適切に青色を取っていますが、ユーザーがListView指を離すとすぐに黒色に戻ります。ユーザーが他のアイテムに触れない限り、選択したアイテムが青色を保持するようにします。

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
     android:state_selected="false"
        android:state_pressed="false" 
        android:drawable="@color/grey" />
    <item android:state_pressed="true" 
        android:drawable="@color/blue" />
    <item android:state_selected="true"
     android:state_pressed="false" 
        android:drawable="@color/blue" />
    </selector>

どのような変更を行う必要がありますか?

4

4 に答える 4

1

を に設定する必要がありandroid:choiceModeます。さらに、既に実装したセレクターに設定し、そのセレクター (または他のドローアブル) をの項目から削除して、背景が透明になるようにする必要があります。ListViewsingleChoiceandroid:listSelectorandroid:backgroundListView

それに加えて、セレクターを拡張して、次のように反応しandroid:state_checkedて登録する必要があります。OnItemClickListener

listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        listView.setItemChecked(position, true);
    }

});

リスト アイテムに使用する最上位のビュー コンポーネントは、 interface を実装する必要がありますCheckable。すぐにチェックできるクラスのリストについては、http://developer.android.com/reference/android/widget/Checkable.htmlを参照してください。テキストのみを表示したい場合CheckedTextViewは、それを行う必要があります。それ以外の場合、カスタム ビューを使用する場合は、このインターフェイスを自分で実装する必要があります。

于 2012-09-14T13:50:52.217 に答える
0

onListItemClick、ビュー ステータスを強制します。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
        v.setSelected(true);
}
于 2012-09-14T13:50:16.800 に答える
0

ArrayAdapterこの場合、クラスから管理する必要があると思います。最後にクリックしたアイテムのビューと位置を覚えておく必要があります。

基本的な考え方はonListItemClick、クリックされた位置と itemview をアダプターに渡し、そこで好きな色で背景を設定し、最後に選択したビューの背景色をデフォルトの色に変更することです。

 public class SampleAdapter extends ArrayAdapter<Object> {

    private int mSelection = 0;

    public SampleAdapter(Context context, int resource, int textViewResourceId,
            List<Object> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    public void setSelection(int mSelection, View selectedItemView) {
        this.mSelection = mSelection;

        if (selectedItemView!= null && lastSelectedRow != null
                && selectedItemView!= lastSelectedRow) {
            lastSelectedRow
                    .setBackgroundResource(R.drawable.bg_normal);
            selectedItemView
                    .setBackgroundResource(R.drawable.bg_selected);
        }

        this.lastSelectedRow = selectedItemView;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        //Usual code logic here....

        if (mSelection == position) {
            mViewHolder.mRootView
                    .setBackgroundResource(R.drawable.bg_selected);
            lastSelectedRow = mViewHolder.mRootView; 
        } else {
            mViewHolder.mRootView
                    .setBackgroundResource(R.drawable.bg_normal);
        }


        return view;
    }

    private static class ViewHolder {
        TextView name;
        View mRootView;
    }
}

リストアイテムをクリックすると、クリックしたアイテムと位置をアダプターに渡す必要があります。

public void onItemClick(AdapterView<?> arg0, View listItemView,
        int position, long id) {

    if(myAdapter != null )
    {
        myAdapter.setSelection(position,listItemView);
    }
}

このセット選択を他のポイントから呼び出したい場合は、このように呼び出すことができます。

myAdapter.setSelection(position,mListViwe.getChildAt(pos));
mListViwe.setSelectionFromTop(position, 0);
于 2013-12-19T06:55:37.587 に答える
0

あなたのコードでこれを試してください

StateListDrawable states = new StateListDrawable();
    states.addState(new int[] {android.R.attr.state_pressed},
        getResources().getDrawable(R.drawable.pressed));
    states.addState(new int[] {android.R.attr.state_focused},
        getResources().getDrawable(R.drawable.focused));
    states.addState(new int[] { },
        getResources().getDrawable(R.drawable.normal));
    imageView.setImageDrawable(states);

それはあなたを助けるかもしれません....

于 2012-09-14T13:56:45.053 に答える