1

ListSelector とセレクターについてよく読んでいます。しかし、ListView の項目を押した後に別の色にする方法がわかりません。

デュアル フラグメント レイアウトでは、ユーザーが左側の ListView をクリックすると、データが読み込まれ、右側のフラグメントに表示されます。どの項目が選択されているかをユーザーに知らせるために、左の ListView の次の項目が押されるまで、これを強調表示します。

そこにカスタム状態が必要ですか? GMail アプリはどのようにこれを行いますか?

どうも

4

5 に答える 5

2

そうです、そこに追加の状態が必要です。GMailアプリがどのようにそれを行っているかはわかりませんが、デフォルトのAndroid設定はandroid:state_activated="true"、タブレットのリストのセレクターで状態を使用します。list を設定することを忘れないでくださいandroid:choiceMode="singleChoice"

于 2012-11-20T14:06:31.397 に答える
2

このセレクターを試しましたか?

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_selected="true"
    android:drawable="@android:color/transparent" />
<item android:state_selected="true"
    android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:state_selected="false"
    android:drawable="@android:color/transparent" />
<item android:state_selected="false"
    android:drawable="@color/message_item_read" />

セレクターは、listSelector ではなく、アイテムの背景に適用する必要があります。

于 2012-11-20T14:06:33.760 に答える
2

Android > 1.6 の私の解決策は次のとおりです。

活動中:

public static int POS = -1;

...
listView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
...
POS = arg2;
...
}

アダプターで:

public View getView(int position, View convertView, ViewGroup parent) {
...
int pos = MyActivity.POS;
if (pos == position){
convertView.setBackgroundResource(R.drawable.lv_yellow);
}else{
convertView.setBackgroundResource(R.drawable.lv_empty);
}
...
}
于 2012-11-20T14:10:47.827 に答える
1

私はこの問題に苦しんでいました...長い間取り組んだ後、私は解決策を見つけました。まず、ドローアブル フォルダーの下に list_view_selector.xml を作成します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selector style for listrow -->
<item       
    android:state_selected="false"
    android:drawable="@drawable/gradient_bg_listview" />

<item   android:state_selected="true" 
    android:drawable="@drawable/gradient_bg_hover_listview" />

<item   android:state_activated="true" 
    android:drawable="@drawable/gradient_bg_hover_listview" />

 </selector>

次に、list_view_selector を定義する必要があるリスト データを取得するために使用するレイアウト。私の場合、次のように定義しました。

//This is the adapter where I defined my customlistview
SimpleAdapter adapter1 = new SimpleAdapter(
                this,
                list1,
                R.layout.customlistview,
                new String[] {"practice_technique","blank"},
                new int[] {R.id.text1,R.id.text2}
                );


//This is my customlistview where I defined list_view_selector

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/list_view_selector" >


        <TextView android:id="@+id/text1"         
            style="@style/ListViewItemTextStyle"
            android:layout_width="fill_parent"
            android:paddingTop="5dp"   
            android:paddingLeft="10dp"      
            android:layout_height="fill_parent"
            />


         <TextView android:id="@+id/text2"         
                android:textSize="12sp"         
                android:textStyle="bold" 
                android:textColor="#616162" 
                android:paddingLeft="10dp"       
                android:layout_width="fill_parent"         
                android:layout_height="fill_parent"
                />


      </RelativeLayout>

そして最後に onListItemclick で次のように書く必要があります:

   protected void onListItemClick(ListView l, View v, int position, long id)
  {
        super.onListItemClick(l, v, position, id);
        HashMap<String, String> val = list.get(position);           
        selectedTech = val.get("practice_technique");

        //below is the key line  
                v.setSelected(true);        
        startSelectedPage();
  }
于 2012-11-20T21:40:57.460 に答える
0

これを行うには、独自の ListAdapter を記述します。具体的には、ArrayAdapter を拡張し、このメソッドにいくつかのコードを入れます。

 View getView(int position, View convertView, ViewGroup parent)

基本的に、このコードは値がクリックされたかどうかを検出し、ビューの背景色を変更します。では、ビューが以前にクリックされたことをどのように確認できますか? ArrayAdapterextendを作成OnClickListenerし、ListViewsetOnItemClickListenerを custom に設定することをお勧めしますArrayAdapter。次のような方法で、どのアイテムがクリックされたかを把握できます。

  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    //Note that position is the item which was clicked. 
  }
于 2012-11-20T14:05:05.893 に答える