2016-07-04 16 views
2

5ヵ月のwebdevelopmentの後、私はアンドロイドに戻る必要があったが、私の古いコードのいくつかはもはや働いていないことに気づいた。私はRecyclerViewにデータ用のアダプタを持っていますが、項目のonClickListenerは何も応答しません。これは私のコードは次のようになります。RecyclerView onClickListener

public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ViewHolder> { 
    private List<Project> itemsData; 

    OnItemClickListener mItemClickListener; 

    public ProjectAdapter(List<Project> itemsData) { 
     this.itemsData = itemsData; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new views 
     View itemLayoutView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.item_layout, parent, false); 

     // create ViewHolder 
     ViewHolder vh = new ViewHolder(itemLayoutView); 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int position) { 


     viewHolder.txtViewId.setText(String.valueOf(itemsData.get(position).getId())); 
     viewHolder.txtViewName.setText(itemsData.get(position).getName()); 


    } 

    // inner class to hold a reference to each item of RecyclerView 
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

     public TextView txtViewName, txtViewId; 

     public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name); 
      txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id); 

     } 

     @Override 
     public void onClick(View v) { 
      System.out.println("onClick"); 
      TextView tv = (TextView) v.findViewById(R.id.item_name); 
      String id = tv.getText().toString(); 
      mItemClickListener.onItemClick(v, getAdapterPosition(), id); //OnItemClickListener mItemClickListener; 
     } 
    } 

    public interface OnItemClickListener { 
     public void onItemClick(View view, int position, String id); 
    } 

    public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) { 
     this.mItemClickListener = mItemClickListener; 
    } 

    // Return the size of your itemsData (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return itemsData.size(); 
    } 
} 

ProjectsActivity.java

projectAdapter.SetOnItemClickListener(new ProjectAdapter.OnItemClickListener() { 
    @Override 
    public void onItemClick(View v, int position, String id) { 
     System.out.println("onItemClick" + id); 
     ActionActivity(id); 
    } 
}); 

リストが示されます、クリックは、コンソールにいなくてもログは動作しません。 誰かが私が間違っていることを知っていますか?私はSDK v23をコンパイルSDKバージョンとして使用しています。私の最小SDKバージョンはv19です。

+1

このhttp://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-を参照してください。 is-dif?rq = 1 – Borja

答えて

7

は、ビューを見つけた後、クリックを追加

public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name); 
      txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id); 

      // here 
      itemLayoutView.setOnClickListener(this); 
     } 
+0

ああ...私... ......どうして私はこれを見逃しましたか?どうもありがとうございます。私はすでにonCreateViewHolderに正確なコードを追加しようとしました。だから私をばかげてViewHolderに追加しないでください。 – Jordy

+0

受け入れる前に1分待つ必要があります^^ – Jordy

+0

これはうまくいくかもしれませんが、それを行うには適切な方法ではありません。これに従ってください。 http://stackoverflow.com/a/26196831/1137730 – Klevi01

2

ClickListenertextViewまたはAnythingに設定していません。ここでははonClickとなっていますか?

1

ステップ1:変更コンストラクタ

public ProjectAdapter(List<Project> itemsData,OnItemClickListener itemClickListener) { 
     this.itemsData = itemsData; 
     onItemClickListener = itemClickListener; 
    } 

ステップ2:インタフェースへの参照を与える

public MyViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this);  
} 

手順3:アダプタためのリスナーを与えますアクティビティまたはフラグメントから

MyAdapter myAdapter = new MyAdapter (list, this); 
2

ビュー行をリサイクルするための設定項目をクリックリスナー:

public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     itemLayoutView.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        TextView tv = (TextView) v.findViewById(R.id.item_name); 
        String id = tv.getText().toString(); 
        mItemClickListener.onItemClick(getLayoutPosition(), v, id); 
       } 
     }); 
     txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name); 
     txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id); 

    } 
関連する問題