3

作成した ListView に問題があります。項目をクリックしたときに項目が選択されるようにしたいのです。

このコードは次のようになります。

protected void onResume() {
...
ListView lv = getListView(); 
lv.setOnItemSelectedListener(new OnItemSelectedListener() 
{
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
        Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
    }
    public void onNothingSelected(AdapterView<?> adapterView) {
        Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition());
    }
});
lv.setOnItemClickListener(new OnItemClickListener()
{
    public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
        lv.setSelection(pos);               
        Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition());              
    }
});
...
}

これを実行して 2 番目の項目 (つまり pos=1) をクリックすると、次のようになります。

04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1

つまり、OnItemClickListener が適切な引数で呼び出され、setSelection(1) を呼び出しても、項目が選択されておらず (したがって、OnItemSelectedListener.onItemSelected(...) も呼び出されません)、getSelectedItemPosition() は、 setSelection(1) 呼び出し。

私は何が欠けていますか?

マイケル

PS .: 私のリストには>=2 要素があります...

4

3 に答える 3

8

ここで欠落している要素は ですchoiceMode。これは十分に文書化されていませんが、Android の ListViews (および拡張により、GridView などの AbsListView から継承するもの) は、デフォルトでは選択できませんが、XML またはコードで有効にすることができます。

XML で:

<ListView
  ...
  android:choiceMode="singleChoice" />

コード:

mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);

これを行うと、Android がsetSelection()自動的に実行するので、自分で追跡する必要はありません。その時点で、あなたの onClickListener は選択を保存するためのものであり、 OnSelectedItemListener を気にすることさえありません:

@Override
public void onItemClick(final AdapterView<?> list, final View v,
    final int position, final long id) {
  Participant p = mAdapter.getParticipantForId(id);
  eventManager.fire(new ParticipantSelectedEvent(p));
  pxList.smoothScrollToPosition(position); // Make sure selection is plainly visible
}
于 2012-04-03T23:25:40.380 に答える
1

私は完全にオフになっていることに気づきました。タッチモードでは、項目を選択してもまったく意味がありません。クリックすると(そして OnClickListener呼び出されます)、それを直接操作するだけです。Android が、方向制御ボタンやタッチ スクリーンなどを備えたこれらのさまざまなデバイスを処理することを理解し始めたところです。使用されていないデバイスで操作がどのように行われるかを想像するのは、必ずしも容易ではありません。テストするか、テストできません。

于 2012-04-04T23:26:57.147 に答える
1

これを試して: -

    ListView lv = getListView();

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {

          // selected item
          String product = ((TextView) view).getText().toString();

         Toast.makeText(getApplicationContext(), "Selected Item :" +product, Toast.LENGTH_SHORT).show();

      }
    });

それがあなたを助けることを願っています。

于 2012-04-04T05:19:24.127 に答える