查看对象不可单击 - 使用OnClickListener

时间:2016-08-23 23:28:42

标签: java android onclicklistener

我创建了一个名为ListItem的基本类,它只存储两个字符串和一个整数。

这是我在RecyclerView中的物品的容器。

我试图让ListItems可点击,所以我让ListItem扩展了View类。然后添加了一个OnClickListener并进行设置。它没有奏效。我通过使用TOAST创建一条短消息进行测试但没有显示。有谁知道为什么?

ListItem类:

  public ListItem(String title, String date, int url, Context context, AttributeSet attrs){
    super(context, attrs);
    this.title = title;
    this.date = date;
    this.url = url;
}

...创建ListItems的类......

    private AttributeSet attrs;


  ListItem y = new ListItem(title, date, a, this.getContext(), attrs);


    View.OnClickListener mFan = new View.OnClickListener()
    {

        public void onClick(View v)
        {
            Toast.makeText(getActivity(), "TEST" , Toast.LENGTH_SHORT).show();

        }

    };

    y.setOnClickListener(mFan);

2 个答案:

答案 0 :(得分:2)

View类中有一种方法。

y.setClickable(true);

您可能还需要为ListView执行此操作。

myListView.setClickable(true);

答案 1 :(得分:2)

在RecyclerView中实现项目点击监听器有点不同。

我假设您已经实现了自己的自定义RecyclerViewAdpater,它应该是这样的。您必须在其中实现自己的OnClickListener接口。

public class CustomRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private List<ListItem> listItems;

    private static OnListItemClickListener onListItemClickListener;

    public interface OnListItemClickListener {

        public void onListItemClick(int position, View v);

    }

    public void setOnListItemClickListener(OnListItemClickListener onListItemClickListener) {

        this.onListItemClickListener = onListItemClickListener;

    }

    // You implement OnClickListener in your list item view holder.
    public static class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ListItemViewHolder(View listItemView) {

            super(listItemView);

            listItemView.setOnClickListener(this);

        }

        @Override
        public void onClick(View view) {

            onListItemClickListener.onListItemClick(getAdapterPosition(), view);

        }

    }

}

然后在你的主要活动或片段中你会做这样的事情。

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

CustomRecyclerViewAdapter customRecyclerViewAdapter = new CustomRecyclerViewAdapter(listItems);

recyclerView.setAdapter(customRecyclerViewAdapter);

customRecyclerViewAdapter.setOnListItemClickListener(new CustomRecyclerViewAdapter.OnListItemClickListener() {

    @Override
    public void onListItemClick(int position, View v) {

        Toast.makeText(getActivity(), "TEST" , Toast.LENGTH_SHORT).show();

    }

});