2016-05-03 16 views
0

私はRecycleViewを持つAndroidアクティビティを持っています。私は、イベントリスナーを追加したいので、私はこのコードをビルドする必要があり:アダプターにEventListenerを追加するにはどうすればいいですか?

public class ResultActivity extends AppCompatActivity { 
    private List<Result> lista; 
    private RecyclerView recyclerView; 
    private ResultsAdapter pAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.results_activity); 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     //recupero la lista delle medication 
     ResultDAO manager = new ResultDAO(this); 

     lista=manager.getResults(); 

     pAdapter = new ResultsAdapter(lista, new ResultsAdapter.OnItemClickListener() { 
      @Override 
      public void onItemClick(Result item) { 

        try{ 
         //recupero i dati della lista in pagina 
         final Dialog dialog = new Dialog(ResultActivity.this); 

         //setting custom layout to dialog 
         dialog.setContentView(R.layout.result_modal); 
         dialog.setTitle("Parametri"); 

        }catch(Exception e){ 
         Log.e("",""); 
        } 

      } 
     }); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(pAdapter); 
    } 
} 

これは私のカスタムアダプタです:

public class ResultsAdapter extends RecyclerView.Adapter<ResultsAdapter.MyViewHolder> { 
    private List<Result> list; 
    private final OnItemClickListener listener; 

    public interface OnItemClickListener { 
     void onItemClick(Result item); 
    } 


    public class MyViewHolder extends RecyclerView.ViewHolder{ 

     public TextView startDate, endDate,examination; 
     Result result; 

     public MyViewHolder(View view) { 
      super(view); 
      startDate = (TextView) view.findViewById(R.id.startDate); 
      endDate = (TextView) view.findViewById(R.id.endDate); 
      examination = (TextView) view.findViewById(R.id.examination); 

     } 
    } 

    public ResultsAdapter(List<Result> list,OnItemClickListener listener) 
    { 
     this.listener=listener; 
     this.list = list; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.results_list_row, parent, false); 
     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Result result = list.get(position); 
     holder.startDate.setText(result.getDateStart()!=null ? result.getDateStart() : ""); 
     holder.endDate.setText(result.getDateEnd()!=null ? result.getDateEnd() : ""); 
     holder.examination.setText(result.getInfo().getDisplayName()); 
    } 
    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 
} 

今、私は自分のアプリケーションを起動しようと私は1つをクリックしよう以上のアイテム、メソッドOnClickは開始しません。

どうすれば修正できますか?

+0

あなたは、アダプタクラスでビューのクリックにlistener.onItemClick(結果)を設定するのを忘れていました。 –

答えて

1

このブログの投稿を確認してください。

http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/

それはあなたが「オンクリック聞き手のはるかに簡単、再利用可能な方法で追加することができます。 例:アダプタクラスのコード以下

ItemClickSupport.addTo(recyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { 
    @Override 
    public void onItemClicked(RecyclerView recyclerView, int position, View v) { 
     // Do your thing 
    } 
}); 
関連する問題