2015-11-14 243 views
1

我想製作一個包括cardviews的傳記應用程序。當我單擊RecyclerView上的每個項目時,我無法實現該功能,必須打開包含詳細信息的第二項活動。這是我的代碼。 我在哪裏做錯了?非常感謝你......在RecyclerView處理項目OnClick方法

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleRecyclerAdapter.ViewHolder>{ 

    private static final String TAG = "debug"; 
    private Context mContext; 
    List<Person> list = new ArrayList<>(); 

    public SimpleRecyclerAdapter(Context mContext, List<Person>list){ 
    this.list=list; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     public TextView person_name; 
     public TextView person_year; 
     public ImageView person_img; 
     public CardView card_view; 

     public ViewHolder(final View view) { 
     super(view); 

      card_view = (CardView) view.findViewById(R.id.card_view); 
      person_name = (TextView) view.findViewById(R.id.person_name); 
      person_year = (TextView) view.findViewById(R.id.person_year); 
      person_img = (ImageView) view.findViewById(R.id.person_photo); 

      view.setOnClickListener(this); 

      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 
        Intent intent = new Intent(v.getContext(), DetailActivity.class); 

        v.getContext().startActivity(intent); 
       } 
      }); 

     } 

     @Override 
     public void onClick(View v) { 

     } 

    } // Closing inner class: Viewholder 

    @Override 
    public SimpleRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_layout, parent, false); 
     // create ViewHolder 
     ViewHolder view_holder = new ViewHolder(v); 
     return view_holder; 
    } 


    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 

     holder.person_name.setText(list.get(position).getName()); 
     holder.person_year.setText(list.get(position).getYear()); 
     holder.person_img.setImageResource(list.get(position).getPhoto_id()); 
    } 

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


    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 
} // Closing outer class: SimpleRecyclerAdapter 

回答

2

你可能已經忘記了點擊屬性添加到您的父行項目layout.Try將它像

android:clickable="true" 

也試圖卸下onClickMethods之一自從您設置了兩次以來的視圖。

view.setOnClickListener(this); 

而且

view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(v.getContext(), DetailActivity.class); 

      v.getContext().startActivity(intent); 
     } 
    }); 
+0

我已經添加了android:clickable =「true」。但刪除後它不起作用,應用程序開始工作。我認爲這個問題一定是不一樣的。 –

+0

查看我編輯的編輯,可能會使用兩個onClickListeners也可能導致問題 –

+0

兄弟,我嘗試了您提供的所有建議。但沒有結果。我不能打開第二個活動,我不知道爲什麼? –

0

在RecycleView, ,以獲得點擊IEM的recycleview物品,你可以在其中設置循環適配器活動獲得。 這樣,

private RecycleAdapter adapter; 

Adapter.SetOnItemClickListener(new Recycle_FrameAdapter.OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
      Toast.makeText(getApplicationContext(),""+position,Toast.LENGTH_SHORT).show(); 
     } 
    }); 

我希望你能得到點擊RecycleView的事件......

0

從ViewHolder類刪除此:

view.setOnClickListener(this); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(v.getContext(), DetailActivity.class); 

       v.getContext().startActivity(intent); 
      } 
     }); 

    } 

    @Override 
    public void onClick(View v) { 

    } 

而且在onBindViewHolder(ViewHolder holder, int position)這樣做:

 holder.card_view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(mContext, "inside viewholder position = " + position, Toast.LENGTH_SHORT).show(); 
        Intent intent = new Intent(mContext,DetailActivity.class); 
        mContext.startActivity(intent); 
       } 
      });