0

リスナーコード:

    lvSearch.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> adapter, View view, int position,
                long id) {
            LinearLayout ll = (LinearLayout) adapter.getChildAt(position);
            TextView tx = (TextView) ll.getChildAt(0);
            TextView tx1 = (TextView) ll.getChildAt(1);
            Log.i("abcValues", tx.getText().toString());

NullPointerExceptionのアイテム値にアクセスしているときに時間がかかりますListView。開始アイテムの値では正常に機能しますが、スクロール後に表示されたアイテムでは機能しません。

4

2 に答える 2

1

getChildAt表示されている行を返します。スクロールしLisViewて行をクリックすると、getChildAt無効な位置のメソッドが呼び出されます(メソッドで使用できる最大数getChildAtは、表示されている行の数-1です)。クリックした行のレイアウトから親が必要な場合はarg1、コードの2番目のパラメーターを使用するだけです。

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
      LinearLayout ll = (LinearLayout) arg1;
      TextView tx = (TextView) ll.getChildAt(0);
      TextView tx1 = (TextView) ll.getChildAt(1);
      Log.i("abcValues", tx.getText().toString());
于 2012-05-06T16:05:23.677 に答える
0

私はあなたがそのようにそれをすることができるとは思わない。渡されたビューから戻って作業してみてください。

  LinearLayout row = (LinearLayout) arg1.getParent(); 
  TextView tx = (TextView) row.findViewById(R.id.tx_id_here);
  TextView tx1 = (TextView) row.findViewById(R.id.tx1_id_here);
于 2012-05-06T16:14:24.520 に答える