java - 通过 MainActivity 在 ListAdapter 中的项目上设置 onClickListener

标签 java android listview listener android-arrayadapter

如何为我的类创建自定义 setOnClickListener?

我目前有一个带有项目的listAdapter(创建了一个项目类)。每当我单击该列表中的某个项目时,我想激活我在 MainActivity 中描述的功能。我想在列表适配器中的类上设置 onClickListeners (自定义 onClickListeners)。我怎样才能这样做?

如果你不明白我的意思,或者想帮忙,我压缩了该项目并将其放在我的 Google Drive 上。

我已经浏览了数十个答案,但我就是找不到有效的答案。请帮忙,因为我在这方面投入了很多时间。

Item item = new Item().setOnClickListener(new ItemListAdapter.ClickListener() {
    @Override
    public void onClick() {
        Toast.makeText(MainActivity.this, "Clicked me", Toast.LENGTH_SHORT).show();
    }
});

编辑:因为我想稍后将其变成一个库,所以对我和用户来说,您可以在项目上设置 onclick 而不是 ListView ,这对我来说很有用,我想从 ListView 中隐藏它最终用户

最佳答案

根据我的理解,你正在寻找这样的东西,像这样改变类,

public class Item {

    private int id;
    private ItemListAdapter.ClickListener mClickListener;

    public Item(int id) {
        this.id = id;
    }


    public Item(int id, @NonNull ItemListAdapter.ClickListener clickListener) {
        this.id = id;
        this.mClickListener = clickListener;
    }


    public Item setOnClickListener(@NonNull ItemListAdapter.ClickListener clickListener) {
        this.mClickListener = clickListener;
        return this;
    }


    public ItemListAdapter.ClickListener getClickListener() {
        return this.mClickListener;
    }

}

适配器类

import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;

public class ItemListAdapter extends ArrayAdapter<Item> {


    public ItemListAdapter(Context context, int resource) {
        super(context, resource, SettingsStorage.getInstance().getItems());
    }

    @NonNull
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.item, parent, false);
        }

        final Item item = getItem(position);
        LinearLayout linearLayout = (LinearLayout) convertView.findViewById(R.id.item);
        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (item.getClickListener() != null) {
                    item.getClickListener().onClick();
                }
            }
        });

        return convertView;
    }

    public interface ClickListener {
        void onClick();
    }
}

你可以像这样设置监听器,

Item item1 = new Item(1);
        item1.setOnClickListener(new ItemListAdapter.ClickListener() {
            @Override
            public void onClick() {
                Toast.makeText(MainActivity.this, "It works", Toast.LENGTH_SHORT).show();
            }
        });
        Item item2 = new Item(2, new ItemListAdapter.ClickListener() {
            @Override
            public void onClick() {

            }
        });

关于java - 通过 MainActivity 在 ListAdapter 中的项目上设置 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856670/

相关文章:

android - 具有静态引用的 Activity

java - Android Activity 只有在它是主要 Activity 时才能正常工作吗?

java - 使用invokeLater或invokeAndWait等待来自另一个GUI的响应

java - 从 java 提交 HTML 表单需要 cookies 和弹出窗口拦截器

java - 以最佳方式计算 x 的 x 次方

android - 谷歌应用索引,如何检查它是否在网站上有效

c# - Xamarin Forms Listview 的条目与自定义选择器冲突

java - 如何从 PHP JSON 数据填充 ListView fragment ?

android - listView 上的复选框阻止事件点击,kotlin

java - 为什么这个小小的 Java 程序会占用如此多的时间和内存?