1

我想在我的項目實施這一代碼,但我的接口類不工作不工作RecyclerView: how to catch the onClick on an ImageView?當我把它從一個片段

我已經實現了一個接口來處理的onclick的ImageView和的onclick在回收站查看。問題是,當我嘗試點擊imageview或在行中不發生任何事情。如果我在我的ViewHolder類中嘗試相同的方法,可行,因爲我可以看到Toast。問題是我需要從我的片段中獲得這項工作。

我認爲,也許問題是當我將偵聽器傳遞給ViewHolder的構造函數,或者當我從我的片段傳遞偵聽器時。

一些幫助將apreciate:

我的適配器類:

private static List<DatabaseModel> dbList; 
private static Context context; 
private RecyclerViewClickListener listener; 


public class MainTimelineRecyclerAdapter extends RecyclerView.Adapter<MainTimelineRecyclerAdapter.AnViewHolder> { 

    public MainTimelineRecyclerAdapter(Context context, List<DatabaseModel> dbList, RecyclerViewClickListener listener){ 
     this.dbList = new ArrayList<DatabaseModel>(); 
     this.context = context; 
     this.dbList = dbList; 
     this.listener = listener; 

    } 

public static class AnViewHolder extends RecyclerView.ViewHolder { 

     public TextView name; 
     public ImageView contact; 

     public AnViewHolder(final View itemLayoutView, final RecyclerViewClickListener listener) { 
      super(itemLayoutView); 


      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if(listener != null) 
         listener.onRowClicked(getAdapterPosition()); 
       } 
      }); 

      contact.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if(listener != null) 
         listener.onViewClicked(v, getAdapterPosition()); 
       } 
      }); 

     } 
    } 

public interface RecyclerViewClickListener { 
     void onRowClicked(int position); 
     void onViewClicked(View v, int position); 
    } 
} 

我的片段:

public class MainTimeline extends Fragment implements RecyclerViewClickListener { 
    private RecyclerViewClickListener listener; 
. 
. 
. 

     mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, listener); 


    @Override 
    public void onViewClicked(View view, int position) { 
     Toast.makeText(getActivity(), "photo", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onRowClicked(int position) { 
     Toast.makeText(getActivity(), "view", Toast.LENGTH_SHORT).show(); 

     } 
} 
+1

在將代碼傳遞給適配器之前,是否在代碼中的某處初始化了偵聽器引用?由於你的片段實現了回調接口,你可能想要把它作爲監聽器來傳遞:mAdapter = new MainTimelineRecyclerAdapter(getActivity(),dbList,this); – Luksprog

+0

嗨Luksprog。謝謝它的作品!如果你想要的話,把一些代碼放在一邊,我會接受你的。 –

回答

2

如果你想片段監聽在適配器發生,那麼該行爲您需要將其註冊爲適配器中發生的事件的偵聽器(通過實現接口並將片段作爲偵聽器):

public class MainTimeline extends Fragment implements RecyclerViewClickListener { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // you don't need a private RecyclerViewClickListener listener; reference as you have the fragment itself 
     mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this); 
    } 
    // implement the methods from the interface 
} 
相關問題