2017-03-26 13 views
0

内部onClickListenerから活動を開始すると、ここで私はここでアイテムをRecyclerView

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> { 

    private Context mContext; 
    private List<ContactInfo> contactList; 
    private static OnItemClickListener ItemClickListener; 

    public ContactAdapter(Context context , List<ContactInfo> contactList) { 
     this.contactList = contactList; 
     this.mContext = context; 
    } 


    @Override 
    public int getItemCount() { 
     return contactList.size(); 
    } 

    @Override 
    public void onBindViewHolder(ContactViewHolder contactViewHolder, int i) { 
     final ContactInfo ci = contactList.get(i); 
     contactViewHolder.vName.setText(ci.name); 
     contactViewHolder.vSurname.setText(ci.surname); 
     contactViewHolder.vEmail.setText(ci.title); 
     contactViewHolder.vTitle.setText(ci.email); 

    } 

    @Override 
    public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
      View itemView = LayoutInflater. 
        from(viewGroup.getContext()). 
        inflate(R.layout.cardview, viewGroup, false); 

      return new ContactViewHolder(itemView); 
    } 



    public static class ContactViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ 

     protected TextView vName; 
     protected TextView vSurname; 
     protected TextView vEmail; 
     protected TextView vTitle; 
     private OnItemClickListener clickListener; 

     public ContactViewHolder(View v) { 
      super(v); 
      vName = (TextView) v.findViewById(R.id.txtName); 
      vSurname = (TextView) v.findViewById(R.id.txtSurname); 
      vEmail = (TextView) v.findViewById(R.id.txtEmail); 
      vTitle = (TextView) v.findViewById(R.id.title); 

      v.setTag(v); 
      v.setOnClickListener(this); 
      v.setOnLongClickListener(this); 
     } 

     public void setClickListener(OnItemClickListener itemClickListener) { 
      this.clickListener = itemClickListener; 
     } 
     @Override 
     public void onClick(View view) { 
      clickListener.onClick(view, getLayoutPosition(),false); 
     } 

     @Override 
     public boolean onLongClick(View view) { 
      clickListener.onClick(view, getLayoutPosition() , true); 
      return true; 
     } 
    } 



    public interface OnItemClickListener { 
     void onClick(View view, int layoutPosition, boolean b); 
    } 


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

をクリックしたときに、私はRecycleView残念ながら私のアプリがクラッシュを使用していますが、私はSetOnItemClickListenerを使用しようとすると、それは

final ContactAdapter ca = new ContactAdapter(getApplicationContext(),createList(30)); 

     recList.setAdapter(ca); 

     ca.SetOnItemClickListener(new ContactAdapter.OnItemClickListener() { 
      @Override 
      public void onClick(View view, int layoutPosition, boolean b) { 

       Intent intent = new Intent("com.example.as.a.aa_Detail"); 
       startActivity(intent); 
      } 
     }); 
    } 

答えて

1

をクラッシュし、私のMainActivityです私はあなたのviewhHolderでclickListenerを初期化していないと思います。 clicklistenerがnullでクラッシュを引き起こしています。対応するsetメソッドを呼び出すことによってその値を設定する必要があります。

0

以下のようにあなたのContactViewHolderを更新します。

public static class ContactViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener 
{ 
    protected TextView vName; 
    protected TextView vSurname; 
    protected TextView vEmail; 
    protected TextView vTitle; 

    public ContactViewHolder(View v) { 
     super(v); 
     vName = (TextView) v.findViewById(R.id.txtName); 
     vSurname = (TextView) v.findViewById(R.id.txtSurname); 
     vEmail = (TextView) v.findViewById(R.id.txtEmail); 
     vTitle = (TextView) v.findViewById(R.id.title); 

     v.setTag(v); 
     v.setOnClickListener(this); 
     v.setOnLongClickListener(this); 
    } 


    @Override 
    public void onClick(View view) { 
     ItemClickListener.onClick(view, getAdapterPosition(),false); 
    } 

    @Override 
    public boolean onLongClick(View view) { 
     ItemClickListener.onClick(view, getAdapterPosition(), true); 
     return true; 
    } 
} 

をアプリがあなたのインテントオブジェクトにresolveActivity()を呼び出し、意図Intent("com.example.as.a.aa_Detail")を受け取るために存在することを確認するには。

ca.SetOnItemClickListener(new ContactAdapter.OnItemClickListener() { 
     @Override 
     public void onClick(View view, int layoutPosition, boolean b) { 

      Intent intent = new Intent("com.example.as.a.aa_Detail"); 

      if (intent.resolveActivity(getPackageManager()) != null) { 
       startActivity(intent); 
      } 
     } 
    }); 

希望すると、この問題を解決するのに役立ちます。

+0

申し訳ありませんが、これは私がまさに望むものではありません..... thnx urヘルプ – ghost