0

単純な ListView を取得して最初の選択を強調表示できない理由を見つけようとして、何日も探していました-選択が触れられたかのように。タッチ モードに関する説明を読みましたが、まだ解決策が見つかりません。

私のコードの簡単なバージョンは次のとおりです。

public class TestList extends Activity {

  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    setContentView(R.layout.listmain);  
    // Layout contains just a ListView with id list
    final ListView listView = (ListView) findViewById(R.id.list);

    String[] values = new String[] {"Android","iPhone","WindowsMobile",
        "Blackberry","WebOS","Ubuntu","Windows7","Max OS X","Linux","OS/2"};

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_checked, values);
    listView.setAdapter(adapter);

    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listView.setSelector(android.R.color.holo_orange_dark);

    listView.requestFocusFromTouch();

    listView.post(new Runnable() {
        @Override
        public void run() {
            listView.setSelection(2);
        }
    });

  }
}

結果の ListView には、強調表示された項目 2 (WindowsMo​​bile) が表示されますが、表示されません。アイテムに触れると、必要に応じて強調表示されたままになります。標準の simple_list レイアウト フォーム、setFocusable(true)、setFocusableInTouchMode(true)、setItemChecked(2,true)、performItemClick() などの関数をすべて試してみましたが、setSelection() 呼び出しの前または後で、すべて失敗しました。役に立ちます。強調表示された項目を GetView() で設定しようとすると、ユーザーが別の項目を選択できなくなります。ユーザーが選択を変更する機能を無効にせずに、最初に強調表示された項目をプログラムで設定する方法を教えてもらえますか?

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#FFCC00"
    android:dividerHeight="1dp" >
</ListView>
4

1 に答える 1

0

この問題は、ListView セレクターが正常に機能しないことが原因のようです。たとえば、白い背景のセレクターを使用すると、最初の選択が強調表示されますが、色を白以外の色に変更しただけでは機能しません!

したがって、コードは次のように変更されます。

listView.setSelector(R.drawable.selector);

そしてselector.xmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
   <item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"/>
   <item android:drawable="@android:color/holo_green_light" android:state_selected="true"/>
   <item android:drawable="@android:color/holo_green_dark" android:state_activated="true"/>
   <item android:drawable="@android:color/white" />
</selector>

背景用の個別のセレクターを含む、さまざまなセレクターを試しました。機能するものもあれば、機能しないものもあります。apk が最初にロードされたときに機能するものもありますが、アプリを再度実行すると機能しません。

于 2012-12-26T15:40:32.047 に答える