Користувальницький ListView має кнопку - Як визначити, який рядок натиснута кнопка?

Я створюю додаток для відстеження інвентаризації для Android для практичного проекту. Я використовую SQLite для зберігання даних, а мій ListView відображає вміст бази даних за допомогою CursorAdapter . Я використовую CursorLoader для отримання даних з бази даних

Кожен рядок мого ListView містить пару кодів TextViews і кнопку . Я планую використовувати кнопку для зменшення кількості стовпців/властивості вибраного елемента в базі даних.

Де можна налаштувати кнопку слухач OnClick ? У моєму класі Діяльність або моєму CursorAdapter класу " bindView() ?

Крім того, як я можу виявити, який рядок кнопка була натиснута на від натискання кнопки?

Я вже використовував onItemClickListener ListView, щоб відправити користувачеві детальну активність, яка відображає більше інформації про поточний ряд. Це було аргумент id, який отримує передається. Так що я знаходжу еквівалент, який я можу використовувати для кнопок, які я поміщаю в кожному рядку.

0
Припустимо, у CursorAdapter .
додано Автор John Joe, джерело

5 Відповіді

У 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 (перегляд) , отримайте тег з перегляду, і ви зможете зрозуміти, який елемент натиснуто.

0
додано

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

для методу void itemClick (int position): - Визначте його

holder.setOnClickListener() block like -

 viewHolder.button.setOnClickListener(new OnClickListener() {  

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

            }  
        }); 

For detailed description refer the below link -

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

0
додано

This question has been answered already, you need to setup your list items as not clickable and manually listen for onClick events of buttons, see a detailed answer here: Android : How to set onClick event for Button in List item of 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) {
        //
    }

}

Це, як ви можете повністю hanhle події клік

0
додано

Подивіться наступне. Я використав спеціальний адаптер, щоб додати onItemClickListener:

private class MyListAdapter(val ctx: Context, val values: List) : ArrayAdapter(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
    }
}
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.