2016-09-26 76 views
0

我正在使用Recyclerview作为菜单类别,我想处理项目点击侦听器以启动其他活动,请将额外的任何一个关于此答案的经验告诉我的问题。如何处理Itemclick listener recyclerview

波纹管是我的代码java。如果可能,我想在ProductCategory.class中放置点击监听器,因为我想多次使用此模块(ProductServiceCategoryContractor,ProductServiceCategoryAdapter)。

ProductServiceCategoryContractor.java(属性)

public class ProductServiceCategoryContractor { 
    private int img; 

    public ProductServiceCategoryContractor(String title) { 
     this.title = title; 
    } 

    private String title; 

    public ProductServiceCategoryContractor(int img, String title) { 
     this.img = img; 
     this.title = title; 
    } 

    public int getImg() { 
     return img; 
    } 

    public void setImg(int img) { 
     this.img = img; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

ProductServiceCategoryAdapter.java

public class ProductServiceCategoryAdapter extends RecyclerView.Adapter<ProductServiceCategoryAdapter.MyViewHolder> { 
    private Context mContext; 
    private List<ProductServiceCategoryContractor> albumList; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public LinearLayout layout; 
     public ImageView img; 
     public TextView title; 
     public MyViewHolder(View view) { 
      super(view); 
      title = (TextView) view.findViewById(R.id.title); 
      img = (ImageView) view.findViewById(R.id.img); 
      layout=(LinearLayout) view.findViewById(R.id.layout); 
     } 
    } 
    public ProductServiceCategoryAdapter(Context mContext, List<ProductServiceCategoryContractor> albumList) { 
     this.mContext = mContext; 
     this.albumList = albumList; 
    } 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.product_menu_model, parent, false); 
     return new MyViewHolder(itemView); 
    } 
    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 
     ProductServiceCategoryContractor album = albumList.get(position); 
     holder.title.setText(album.getTitle()); 
     Glide.with(mContext).load(album.getImg()).into(holder.img); 
    } 
    @Override 
    public int getItemCount() { 
     return albumList.size(); 
    } 
} 

ProductCategory.java

public class ProductCategory extends AppCompatActivity { 
    private RecyclerView recyclerView; 
    private ProductServiceCategoryAdapter adapter; 
    private List<ProductServiceCategoryContractor> albumList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_product_category); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     recyclerView = (RecyclerView) findViewById(R.id.product_category); 
     albumList = new ArrayList<>(); 
     adapter = new ProductServiceCategoryAdapter(this, albumList); 
     RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(adapter); 
     prepareAlbums(); 
    } 
    private void prepareAlbums() { 
     int[] covers = new int[]{ 
       R.mipmap.ic_launcher 
     }; 
     ProductServiceCategoryContractor pl_list = new ProductServiceCategoryContractor(covers[0], "Phone Spare parts & Accessory"); 
     albumList.add(pl_list); 
     pl_list = new ProductServiceCategoryContractor(covers[0], "Computer Networking"); 
     albumList.add(pl_list); 
     pl_list = new ProductServiceCategoryContractor("Clothing Accessory"); 
     albumList.add(pl_list); 
     adapter.notifyDataSetChanged(); 
    } 
    @Override 
    public boolean onSupportNavigateUp(){ 
     finish(); 
     return true; 
    } 
} 
+1

为了处理单击recyclerview,使用** ** RecyclerItemClickListener并使用** recyclerview1.addOnItemTouchListener(lisenter)**。 –

回答

2

与View.OnClickListener实施ViewHolder,重写OnClick方法并创建一个界面,现在你可以使用onclick方法创建ViewHolder。 下面是简单的exmple ...

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


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

     public IMyViewHolderClicks mListener; 


     public ViewHolder(View v, IMyViewHolderClicks listener) { 

      super(v); 
      v.setOnClickListener(this); 
     } 


     @Override 
     public void onClick(View v) { 
      mListener.myOnClick(v, getLayoutPosition()); 
     } 


     public static interface IMyViewHolderClicks { 
      public void myOnClick(View caller, int position); 
     } 
    } 

    public MyCustomAdapter(Context context) { 
     this.context = context; 
     //.............. 
    } 


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_list_item, parent, false); 

     MyCustomAdapter.ViewHolder vh = new ViewHolder(v, new PostsAdapter.ViewHolder.IMyViewHolderClicks() { 
      @Override 
      public void myOnClick(View caller, int position) { 

       //Add your onclick event here 
      } 
     }); 

     return vh; 
    } 


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

     //.......... 
    } 
+0

我不认为你真的需要'getLayoutPosition()'作为位置。在大多数情况下,您需要与数据相关的'getAdapterPosition()'。 –

0

有实现OnClickListenerRecyclerView适配器许多方面。

  1. 您可以实现点击监听器里onBindViewHolder()方法如下面

    holder.buttoncalling.setOnClickListener(new View.OnClickListener(){ 
        // perform click operation 
    }); 
    
  2. 您还可以实现它,你ItemHolder里面这样

    buttoncalling.setOnClickListener(new View.OnClickListener(){ 
        // perform click operation  
    }); 
    

,并使用getAdapterPosition()每当你需要在中推荐的物品点击位置

  • 您也可以接口回调你的活动,并与它一起传递位置做参考。
  • 0

    把你onClickListener在onBindViewHolder ..

    @Override 
        public void onBindViewHolder(final MyViewHolder holder, int position) { 
         ProductServiceCategoryContractor album = albumList.get(position); 
         holder.title.setText(album.getTitle()); 
         Glide.with(mContext).load(album.getImg()).into(holder.img); 
    
         holder.img.setOnClickListener(new View.OnClickListener(){ 
          @Override 
          public void onClick(View v) { 
           Intent intent = new Intent(mContext, OtherActivity.class); 
           intent.putExtra("extra", "message"); 
           mContext.startActivity(intent); 
          } 
         }); 
        } 
    
    +0

    你不需要在每个onBind事件上设置onClickListener,而是使用onCreateViewHolder,就像指向@ dhiraj-sharma –