2016-08-23 86 views
0

我创建了一个名为ListItem的基本类,它只存储两个字符串和一个整数。查看对象不可点击 - 使用OnClickListener

这是我坐在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

有一个在View类此的方法。

y.setClickable(true); 

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

myListView.setClickable(true);

+0

不需要为ListView本身做。 – lionscribe

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(); 

    } 

}); 
+0

非常感谢! – javapalava

+0

嗨@javapalava!如果这对你有帮助,请接受答案。谢谢! –