即使遵循侦听程序,点击后再循环查看项目也不起作用

时间:2018-04-09 10:19:51

标签: android view

我正在尝试从回收站视图项启动活动并按照过程操作但是onClick没有在我的应用程序中调用。我检查了hasOnClickListeners()并返回true。请帮帮我。

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

public List<String> shopDetails;
public View view;
public Context context;




public ShopAdapter(List<String> shopDetails){
    this.shopDetails = shopDetails;
}



@Override
public ShopAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int 
viewType) {

   view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_single,parent,false);



    return new ViewHolder(view);
}

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

    final String shop_description_data = "ONE";
    final String shop_name_data = "TWO";

    holder.setShopNameView(shop_name_data);
    holder.setShopInfoView(shop_description_data);

这里我设置了来自视图持有者的项目点击监听器

    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onItemClicked(View view, int position) {
            Log.d("GOUSE","on Item Click");
        }
    });


}

private void startShopActivity(String shop_name_data, String shop_description_data,View view) {



}

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




public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    private TextView shopDescView;
    private TextView shopNameView;
    private View mView;
    private ItemClickListener onItemClickListener;
    private CardView shopItem;

    public ViewHolder(View itemView) {
        super(itemView);
        mView = itemView;

这里我将on click侦听器设置为我的侦听器接口

    mView.setOnClickListener(this);
        Log.d("Listener",mView.hasOnClickListeners()+"");
    }


    public void setShopInfoView(String shopDescText){
        shopDescView = mView.findViewById(R.id.shop_info);
        shopDescView.setText(shopDescText);
    }
    public void setShopNameView(String shopNameText){
        shopNameView = mView.findViewById(R.id.shop_name);
        shopNameView.setText(shopNameText);
    }

    public void startShop(String shopName,String shopDesc){
        Intent shopActivityMainIntent = new Intent(mView.getContext(),MainActivity.class);
        shopActivityMainIntent.putExtra("shopName",shopName);
        shopActivityMainIntent.putExtra("shopDescription",shopDesc);
        mView.getContext().startActivity(shopActivityMainIntent);
    }

    public void setItemClickListener(ItemClickListener itemClickListener){
        Log.d("GOUSE","set item listener");
        this.onItemClickListener = itemClickListener;

    }


    @Override
    public void onClick(View view) {
        Log.d("GOUSE","set item clicked");
        onItemClickListener.onItemClicked(view,getAdapterPosition());
    }
}

}

1 个答案:

答案 0 :(得分:0)

在适配器使用的界面中进行一些更改以处理回收器视图点击事件,如下面的代码...

    private onItemClickListener onItemClickListener;

/**
 * this interface is used to handle recycler view click event.
 */
public interface onItemClickListener {
    void onItemClick(Cricketer cricketer);
}

public void setOnItemClickListener(onItemClickListener onItemClickListener) {
    this.onItemClickListener = onItemClickListener;
}
   @Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, final int position) {
    final Cricketer cricketer = mCricketerList.get(position);
    holder.mTvTitle.setText(cricketer.getName());
    holder.mTvDescription.setText(cricketer.getCountry());
    holder.mTvDate.setText(cricketer.getDateOfBirth());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListener.onItemClick(cricketer);
        }
    });
}

将适配器绑定到Recycler视图时,获取点击事件,如下面的代码..

  /**
 * this method used to bind adapter into recycler view.
 */
private void setAdapter() {
    recyclerViewAdapter = new RecyclerViewAdapter(this, mCricketerList);
    mRvData.setAdapter(recyclerViewAdapter);
    recyclerViewAdapter.notifyDataSetChanged();
    recyclerViewAdapter.setOnItemClickListener(new RecyclerViewAdapter.onItemClickListener() {
        @Override
        public void onItemClick(Cricketer cricketer) {
            Toast.makeText(getApplicationContext(), "Cricketer Name::" + cricketer.getName(), Toast.LENGTH_SHORT).show();
        }
    });
}