Android: получить элемент списка из кнопки, нажатой в пользовательском listview

У меня есть пользовательский ListView с двумя кнопками и я, когда я нажимаю любую кнопку на любой строке, я хочу получить текстовую метку в Listview, и теперь просто выкладываю тост с ней. Пока ничего не работало, я продолжаю получать последний элемент в своем массиве.

Вот скриншот, чтобы дать вам лучшее представление о том, что я имею в виду

Введите описание изображения здесь

Вот мой подкласс Adapter для моего пользовательского ListView

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

Solutions Collecting From Web of "Android: получить элемент списка из кнопки, нажатой в пользовательском listview"

Легко сделать:

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

Использовать атрибут 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(); } } }); 

Если у вас есть 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(); } 

Просто используйте getItem () и передайте позицию Ex: getItem(position).getID() здесь метод getID () – метод getter

Установите onClick = "click" на xml кнопки / изображения / etc …

И в своей деятельности выполните:

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