13

リストビューのカスタムアダプタ内で選択したアイテムの値を取得しようとしています。私は次のコードでこれを試します:

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();

                }

最初は、クリックすると値は良好ですが、スクロールして別のアイテムをクリックすると、クリックしたアイテムの値が間違って表示されます...これを引き起こしている原因は何かわかりますか?

4

3 に答える 3

49

パラメータvは現在の行です。したがって、次を使用します。

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();
}

(または使用できますgetChildAt(position)が、これは遅くなります。)

レイアウトによっては、これをさらに単純化できる場合があることを理解してください。

于 2012-11-15T20:32:15.283 に答える
0

ほんの少しの変更が必要です

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

カスタムビューを使用しているため、OnItemClickListenerでView引数を渡す必要があります。次に、その値を使用して、そこに存在するTextViewの詳細を取得する必要があります。

于 2015-01-03T09:08:56.873 に答える
0
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class);
                i.putExtra("hello",adapter.getItem(position).getUsername() );
                startActivity(i);
            }
        });

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

于 2017-05-24T11:25:25.493 に答える