web-dev-qa-db-ja.com

Android:カスタムリストビューでクリックされたボタンからリストビューアイテムを取得します

2つのボタンがあるカスタムListViewがあり、任意の行のいずれかのボタンをクリックすると、Listviewのテキストラベルを取得し、今のところはそれを使ってトーストをポップアップします。これまでのところ、何も機能していません。配列の最後のアイテムを取得し続けています。

これが私が何を意味するのかをよりよく理解するためのスクリーンショットです

enter image description here

これが私のカスタムListViewのAdapterサブクラスです

static final String[] Names = 
           new String[] { "John", "Mike", "Maria", "Miguel"};


class MyArrayAdapter extends ArrayAdapter<String> {
    private final Context context;      

    int which;

    public MyArrayAdapter(Context context, String[] pValues) {
        super(context, R.layout.main, pValues);
        this.context = context;
        values = pValues;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        rowView = inflater.inflate(R.layout.main, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
        Button call = (Button) rowView.findViewById(R.id.button1);
        Button chat = (Button) rowView.findViewById(R.id.button2);
        textView.setText(values[position]);


        // Change icon based on name
        s = values[position];           
        which = position;
        call.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String name = values[which];
                Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show();
            }
        });

        return rowView;
    }
}

編集:

String name = textView.getText().toString();
RelativeLayout ll = (RelativeLayout)v.getParent();
textView = (TextView)ll.findViewById(R.id.label);
Toast.makeText(CustomListView.this, name,
Toast.LENGTH_SHORT).show();
14
Amanni

簡単に:

    call.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
            RelativeLayout rl = (RelativeLayout)v.getParent();
            TextView tv = (TextView)rl.findViewById(R.id.label);
            String text = tv.getText().toString();
            Toast.makeText(CustomListView.this, text, Toast.LENGTH_SHORT).show(); 
        } 
    }); 
14
Barak

ビューのsetTag属性を使用します............。

なので

Button call = (Button) rowView.findViewById(R.id.button1);
call.setTag(position);

そして

call.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
               int which = -1;
               Obejct obj =  v.getTag();
              if(obj instaceof Integer){
               which  = ((Integer)obj).intValue();
                    }

              if(which >-1){
                String name = values[which];
                Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show();
                }
            }
        });
5
Dheeresh Singh

ListActivityがあり、独自のアダプターを使用していない場合でも、次のように、タップされたボタンに属するリストアイテムを取得できます。

リスト行のレイアウトファイル:

<ImageButton
        Android:id="@+id/button_call"
        Android:layout_height="48dip"
        Android:layout_width="48dip"
        Android:contentDescription="Call"
        Android:onClick="callBuddy"
        Android:src="@drawable/call_button_image"
        />

ListActivity内:

public void callBuddy(View view) {

    int position = getListView().getPositionForView((View) view.getParent());
    Buddy buddyToCall = (Buddy) getListView().getItemAtPosition(position);

    Toast.makeText(MyListActivity.this, String.format("Calling your buddy %s.", buddyToCall.name), Toast.LENGTH_SHORT).show();

}
3
Ciske Boekelo

getItem()を使用して、位置を渡すだけですEx:getItem(position).getID() here getID()メソッドはgetterメソッドです

0
Ramesh kumar

OnClick = "click"をbutton/image/etcのxmlに設定します...

アクティビティでは、次のことを行います。

public void click(View v) {
    final int position = getListView().getPositionForView(v);
    String text = getListView().getItemAtPosition(position).toString();
    Toast.makeText(getApplicationContext, text, Toast.LENGTH_SHORT).show();
}
0