Android: как установить событие onClick для кнопки в элементе списка в ListView

Я – Android Beginner. Я хочу добавить событие onClick для кнопок, используемых в элементе Listview. Как я могу дать событие onClick для кнопок в элементе списка.

Solutions Collecting From Web of "Android: как установить событие onClick для кнопки в элементе списка в ListView"

Вы можете установить событие getView метод getView вашего пользовательского адаптера.
Проверьте ссылку http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html

В классе адаптера

 public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View row = inflater.inflate(R.layout.vehicals_details_row, parent, false); Button deleteImageView = (Button) row.findViewById(R.id.DeleteImageView); deleteImageView.setOnClickListener(new OnClickListener() { public void onClick(View v) { //... } }); } 

Но вы можете получить проблему – строка listView не может быть нажата . Решение:

  • Сделать ViewView ориентированным android:focusable="true"
  • Button not focusable android:focusable="false"

Попробуй это,

 public View getView(final int position, View convertView,ViewGroup parent) { if(convertView == null) { LayoutInflater inflater = getLayoutInflater(); convertView = (LinearLayout)inflater.inflate(R.layout.YOUR_LAYOUT, null); } Button Button1= (Button) convertView .findViewById(R.id.BUTTON1_ID); Button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Your code that you want to execute on this button click } }); return convertView ; } 

Это может помочь вам ….

В пользовательском адаптере внутри метода getView:

 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do things Here } }); 

Я предполагаю, что вы определили пользовательский адаптер для своего ListView.

Если это так, вы можете назначить onClickListener для своей кнопки внутри метода getView() пользовательского адаптера.

Это обсуждалось во многих сообщениях, но до сих пор я не мог найти решение:

 android:focusable="false" android:focusableInTouchMode="false" android:focusableInTouchMode="false" 

Ниже решение будет работать с любыми компонентами ui: Button, ImageButtons, ImageView, Textview. LinearLayout, RelativeLayout кликает внутри ячейки списка и отвечает на onItemClick:

Класс адаптера – getview ():

  @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = lInflater.inflate(R.layout.my_ref_row, parent, false); } final Organization currentOrg = organizationlist.get(position).getOrganization(); TextView name = (TextView) view.findViewById(R.id.name); Button btn = (Button) view.findViewById(R.id.btn_check); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { context.doSelection(currentOrg); } }); if(currentOrg.isSelected()){ btn.setBackgroundResource(R.drawable.sub_search_tick); }else{ btn.setBackgroundResource(R.drawable.sub_search_tick_box); } } 

В этом вы можете получить объект, нажавший кнопку, в действие. (Специально, если вы хотите, чтобы кнопка выступала в качестве флажка с выбранными и не выбранными состояниями):

  public void doSelection(Organization currentOrg) { Log.e("Btn clicked ", currentOrg.getOrgName()); if (currentOrg.isSelected() == false) { currentOrg.setSelected(true); } else { currentOrg.setSelected(false); } adapter.notifyDataSetChanged(); } 

В методе getview выставляйте слушателя вне проверки просмотра. Попробуйте это сделать .. он работал в моем случае .. Как увеличить или уменьшить значение edittext в каждой строке списка?