2016-08-23 85 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!如果這對你有幫助,請接受答案。謝謝! –