Подтвердить что ты не робот

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

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

4b9b3361

Ответ 2

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

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 не может быть нажата. Решение:

  • сделать ListView focusable android:focusable="true"
  • Кнопка не настраивается  android:focusable="false"

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

    }