2012-11-15 12 views
12

リストビュー上のカスタムアダプタ内で選択したアイテムの値を取得しようとしました。私がクリックした場合、値が良好である、冒頭でOnItemClickリストビューのアイテムの値を取得

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

        View curr = parent.getChildAt((int) id); 
        TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem); 
        String playerChanged = c.getText().toString(); 

        Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 

       } 

、私はスクロールと私は別の項目をクリックしたら、私はそのクリックされた項目の間違った値を取得...:私は次のコードでこれを試してみてくださいこれを引き起こす原因は何ですか?

答えて

45

パラメータvが現在の行です。これを使用します(。それとも、getChildAt(position)を使用することができますが、これは遅くなります)

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 
    String playerChanged = c.getText().toString(); 

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 
} 

はあなたのレイアウトに応じて、より多くの本を簡素化することができるかもしれない理解します。カスタムを使用しているので

+0

ありがとうございます。 getChildAtの位置がうまくいかなかった理由はありますか?私もこれを試しましたが、これも私にエラーをもたらしました.. –

+1

あなたのアダプタに応じて、 'id'は完全に異なるインデックスを参照するかもしれません。たとえば、CursorAdapterはテーブルの主キーを 'id'で返します。一方、 'position'は常に行数を参照する必要があります。 – Sam

+0

@Samありがとう、これは私にとって素晴らしい仕事です! –

0

ただ、小さな変更が

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 

必要です、あなたはその

に存在TextViewsの詳細を取得するには、その値を使用する必要があなたのOnItemClickListenerに表示引数を渡す必要があります表示
+1

次回はコメントを作成し、追加の回答を投稿しないでください。 – sparticvs

0

ここで、usernameはクラスで宣言された文字列フィールドであり、クリックすると膨張した行の詳細を取得するにはアダプタクラスでgetItem()メソッドをオーバーライドする必要があります。

関連する問題