首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过onClickListener对ListAdapter中的项设置ListAdapter

通过onClickListener对ListAdapter中的项设置ListAdapter
EN

Stack Overflow用户
提问于 2017-05-08 20:22:59
回答 3查看 788关注 0票数 0

如何为类创建自定义setOnClickListener?

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

如果你不理解我,或者想帮忙,我就把这个项目拉链放到我的Google Drive上。

我看了几十个答案,只是找不到起作用的那个..请帮忙,因为我花了很多时间在这上面。

代码语言:javascript
复制
Item item = new Item().setOnClickListener(new ItemListAdapter.ClickListener() {
    @Override
    public void onClick() {
        Toast.makeText(MainActivity.this, "Clicked me", Toast.LENGTH_SHORT).show();
    }
});

编辑:因为我以后想把它变成一个库,所以对我和用户来说,您可以设置一个onclick而不是listview,这对我和用户都是有用的,我想最终对用户隐藏它,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-08 21:03:48

据我所知,你在寻找这样的东西,像这样改变这个类,

代码语言:javascript
复制
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;
    }

}

适配器类

代码语言:javascript
复制
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();
    }
}

你可以像这样设置听者,

代码语言:javascript
复制
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() {

            }
        });
票数 1
EN

Stack Overflow用户

发布于 2017-05-08 20:33:09

您可以使用OnItemClickListener

代码语言:javascript
复制
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Item item = adapter.getItem(position);
    }
});

编辑:是指Item只是一个POJO,您不能“单击”它。你能做的就是“转发”听众:

代码语言:javascript
复制
Class Item {
    private ItemClickListener listener;

    // getter / setter

    interface ItemClickListener{
        void onItemClick(Item item);
    }
}

// you implement this in your library
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Item item = adapter.getItem(position);
        item.getListener().onItemClick(item);
    }
});
票数 0
EN

Stack Overflow用户

发布于 2017-05-08 20:40:40

如果要将单击侦听器设置为整行,则"OnItemClickListner“是您要查找的选项。

检查这个:ListView与OnItemClickListener安卓

但是,如果您想在行的某一项上设置单击侦听器,那么首先您必须从行中获取该项目,然后您可以做任何您想做的事情。

检查这个:ListView与OnItemClickListener安卓

获取自定义适配器中的项列表

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43856670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档