Пользовательский ListView имеет кнопку - как определить, на какой строке была нажата кнопка? [Дубликат]

Я делаю приложение отслеживания инвентаря для Androidпрактического проекта. Я использую Buttonдля хранения, и я ListViewотображает содержимое базы данных с помощью Button. Я использую OnClickдля извлечения данных из базы данных

В каждой строке у меня ListViewесть пара Activityи Button. Я планирую использовать Buttonдля уменьшения столбца количества / свойства выбранного элемента в базе данных.

Где я могу настроить OnClickпрослушиватель кнопок ? В моем CursorAdapterклассе или bindView()классе onItemClickListener?

Также, как я могу определить, какую строку нажала кнопка нажатием кнопки?

Я уже использовал ListView для отправки пользователю подробного действия, отображающего больше информации о текущей строке. Это аргумент id, который передается. Поэтому я нахожу эквивалент, который я могу использовать для кнопок, которые я помещал в каждую строку.private class MyListAdapter(val ctx: Context, val values: List<MyListInformatin>) : ArrayAdapter<MyListInformatin>(ctx, -1, values) { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val rowView = inflater.inflate(R.layout.item_my_layout, parent, false) rowView.setOnClickListener { val detailsActivity = Intent(ctx, DetailsActivity::class.java) detailsActivity.putExtra(DetailsActivity.ROUTE_NUMBER_PARAM, values.get(position).routeNumber) val bundle = Bundle() bundle.putParcelable(detailsActivity.ROUTE_NO_STRUCTURE_PARAM, values.get(position).strucutre) detailsActivity.putExtra(detailsActivity.PARAM_BUNDLE, bundle) ctx.startActivity(detailsActivity) } return rowView } }

java,android,listview,onclicklistener,buttonclick,

0

Ответов: 5


0

Посмотрите следующее. Я использовал пользовательский адаптер, чтобы добавить onItemClickListener:

holder.setOnClickListener() block like -

 viewHolder.button.setOnClickListener(new OnClickListener() {  

            @Override  
            public void onClick(View v) {  
                if (yourInterface != null) {  
                    yourInterface.itemClick(position);  
                }  

            }  
        }); 

0

Вы можете создать интерфейс внутри вашего адаптера и объявить fucntion в этом interfae как ** void itemClick (int position) ** и реализовать этот интерфейс в своей деятельности

для метода void itemClick (int position): - Определите его

onClick

Для подробного описания обратитесь к приведенной ниже ссылке -

https://www.c-sharpcorner.com/UploadFile/9e8439/create-custom-listener-on-button-in-listitem-listview-in-a/


0

На этот вопрос уже был дан ответ, вам нужно настроить элементы списка как не интерактивные, а вручную прослушивать onClickсобытия кнопок, см. Подробный ответ здесь: Android: как установить событие onClick для кнопки в элементе списка в ListView


0
public class MyCustomAdapter extend Adapter {
    private MyOnClickListener mListener;

    @Override
    public View getView(int position, View view, ViewGroup parent)
    {

        ...

        // Your view
        mContainer.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mListener.onWholeItemClick(position);
            }
        });

        // Your button
        mButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mListener.onButtonClick(position);
            }
        });
    }

    public void setListener(MyOnClickListener listener) {
        this.mListener = listener;
    }

    // Listener interface
    public interface MyOnClickListener() {
        void onWholeItemClick(int position); // Can pass data as a parametter
        void onButtonClick(int position); 
    }
}

public class MyActivity extend Activity implement MyOnClickListener() {
    ...

    @Override
    public void onCreate(...) {
        mAdapter = new MyCustomAdapter(this);
        mAdapter.setListener(this); // Pass the listener to adapter
    }

    @Override
    public void onWholeItemClick(int position) {
        // 
    }

    @Override 
    public void onButtonClick(int position) {
        //
    }

}

Это то, как вы можете полностью активировать клики


0

В onBindViewHolderдают тег этой кнопки. этот тег может быть позицией элемента или самого элемента. (тег может быть объектом)

 override fun onBindViewHolder(holder: ItemHolder, position: Int) {
   CUSTOMMODEL item = items[position];
   ...
   holder.button.setTag(item);
   //OR
   holder.button.setTag(position);
   ...
   holder.button.setOnClickListener(clickListener);
}

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

Java, Android, ListView, onclicklistener, ButtonClick,
Похожие вопросы