Android 在Recyclerview适配器类内调用自定义侦听器
嗨,我需要的是当有人单击列表中的某个项目时,在Recyclerview适配器类中实现我的自定义侦听器 我确实创建了一个接口类Android 在Recyclerview适配器类内调用自定义侦听器,android,android-recyclerview,listener,android-adapter,Android,Android Recyclerview,Listener,Android Adapter,嗨,我需要的是当有人单击列表中的某个项目时,在Recyclerview适配器类中实现我的自定义侦听器 我确实创建了一个接口类 public interface Selected_Item_Listener { void onButtonClicked(boolean optional,String product_name,String ID); } 在主要活动中,我使用 Selected_Item_Listener selected_item_listener; calss whatever
public interface Selected_Item_Listener {
void onButtonClicked(boolean optional,String product_name,String ID);
}
在主要活动中,我使用
Selected_Item_Listener selected_item_listener;
calss whatever{
init(savedInstanceState);
selected_item_listener = new Selected_Item_Listener() {
@Override
public void onButtonClicked(boolean optional, String
product_name, String ID) {
};
public void init(Bundle savedInstanceState) {
itemAdapter = new ItemAdapter(item_list,
getContext(),selected_item_listener);
LinearLayoutManager horizontalLayoutManager = new
LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
service_items.setLayoutManager(horizontalLayoutManager);
service_items.setAdapter(itemAdapter);
populateList();
}
private void populatList(){
item_list.add(new
serive_items_list_item(R.drawable.gg,"gg",""));
item_list.add(new
serive_items_list_item(R.drawable.gg,"gg",""));
item_list.add(new serive_items_list_item(R.drawable.gg,"gg
gg",""));
itemAdapter.notifyDataSetChanged();
}
}
在适配器类中,我添加了以下代码
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {
Context context;
List<serive_items_list_item> horizontalList;
Selected_Item_Listener selected_item_listener;
public ItemAdapter(List<serive_items_list_item> horizontalList, Context context,Selected_Item_Listener selected_item_listener) {
this.horizontalList = horizontalList;
this.selected_item_listener = selected_item_listener;
this.context = context;
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflate the layout file
View itemProductView = LayoutInflater.from(parent.getContext()).inflate(R.layout.service_item_items, parent, false);
ItemViewHolder gvh = new ItemViewHolder(itemProductView);
return gvh;
}
@Override
public void onBindViewHolder(ItemViewHolder holder, final int position) {
if (horizontalList.size() == 2){
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins(Main.screenWidth/8, 0, Main.screenWidth/9, 0);
holder.lay.setLayoutParams(params);
}else {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins(Main.screenWidth/28, 0, Main.screenWidth/20, 0);
holder.lay.setLayoutParams(params);
}
holder.imageView.setImageResource(horizontalList.get(position).getImageResource());
holder.txtview.setText(horizontalList.get(position).getText());
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String productName = horizontalList.get(position).getText().toString();
if (selected_item_listener != null){
selected_item_listener.onButtonClicked(true, productName, "");
}
}
});
}
@Override
public int getItemCount() {
return horizontalList.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView txtview;
LinearLayout lay;
public ItemViewHolder(View view) {
super(view);
imageView=(ImageView) view.findViewById(R.id.imageview_item);
txtview=(TextView) view.findViewById(R.id.textview_title_item);
lay = (LinearLayout)view.findViewById(R.id.linear_view);
}
}
}
所选的\u项\u侦听器为空,我想知道我错过了什么?我与另一个扩展对话框并正常工作的类使用了相同的类和代码
我试着把init(savedInstanceState)放进去;在选定的\u项\u侦听器之后=新选定的\u项\u侦听器(){};现在可以开始工作了您是在
onCreate()
内部初始化selected\u item\u侦听器
还是作为字段引用?是的,在onCreate(Bundle savedInstanceState)内部我调用init(savedInstanceState);我不是在问init(savedInstanceState)
;你能发布清晰的代码段吗?无法理解。你能发布日志吗?您正在正确执行null检查,因此我认为不是所选的\u项\u侦听器为null。
selected_item_listener.onButtonClicked(true, productName, "");