java.lang.NullPointerException:尝试调用接口方法';空对象引用上的void onclicklistner.onItemClick(int,android.view.view)
因此,我用API设置了我的RecyclerView,它正在适配器上填充列表,但每次我单击列表项时,它都应该打开新活动并通过一个接口传递位置 单击会给我NullPointerException:java.lang.NullPointerException:尝试调用接口方法';空对象引用上的void onclicklistner.onItemClick(int,android.view.view),java,android,android-recyclerview,Java,Android,Android Recyclerview,因此,我用API设置了我的RecyclerView,它正在适配器上填充列表,但每次我单击列表项时,它都应该打开新活动并通过一个接口传递位置 单击会给我NullPointerException: public class ticketsListAdapter extends RecyclerView.Adapter<ticketsListAdapter.ViewHolder>{ onclicklistner listners; Context context; public tick
public class ticketsListAdapter extends RecyclerView.Adapter<ticketsListAdapter.ViewHolder>{
onclicklistner listners;
Context context;
public ticketsListAdapter(Context context, onclicklistner listners) {
this.context = context;
this.listners = listners;
}
@NonNull
@Override
public ticketsListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.list_support_tickets,parent, false);
return new ViewHolder(view, listners);
}
@Override
public void onBindViewHolder(@NonNull ticketsListAdapter.ViewHolder holder, int position) {
holder.item_name.setText("hello");
}
@Override
public int getItemCount() {
return 5;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView item_name;
public ViewHolder(@NonNull View itemView, onclicklistner listner) {
super(itemView);
item_name = itemView.findViewById(R.id.tickets_name);
item_name.setOnClickListener(this::onClick);
}
@Override
public void onClick(View v) {
listners.onItemClick(getAdapterPosition(), item_name);
}
}
public interface onclicklistner{
void onItemClick(int position, View v);
}
实现回收器视图的片段
public class support_fragment extends Fragment {
FloatingActionButton create_support;
ticketsListAdapter.onclicklistner listner;
RecyclerView recyclerView;
ticketsListAdapter ticketsListAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_support, container, false);
create_support = view.findViewById(R.id.create_support);
recyclerView = view.findViewById(R.id.support_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(false);
ticketsListAdapter = new ticketsListAdapter(getContext(), listner);
recyclerView.setAdapter(ticketsListAdapter);
create_support.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getContext(), Support_main_activity.class);
startActivity(i);
}
});
listner = new ticketsListAdapter.onclicklistner() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(getContext(), "Test", Toast.LENGTH_SHORT).show();
}
};
return view;
}
}在初始化之前,您正在使用侦听器。这就是为什么会出现nullpointerexception
public class support_fragment extends Fragment {
FloatingActionButton create_support;
ticketsListAdapter.onclicklistner listner;
RecyclerView recyclerView;
ticketsListAdapter ticketsListAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_support, container, false);
create_support = view.findViewById(R.id.create_support);
recyclerView = view.findViewById(R.id.support_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(false);
//initialize the listner before using!
listner = new ticketsListAdapter.onclicklistner() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(getContext(), "Test", Toast.LENGTH_SHORT).show();
}
};
ticketsListAdapter = new ticketsListAdapter(getContext(), listner);
recyclerView.setAdapter(ticketsListAdapter);
create_support.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getContext(), Support_main_activity.class);
startActivity(i);
}
});
/*
listner = new ticketsListAdapter.onclicklistner() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(getContext(), "Test", Toast.LENGTH_SHORT).show();
}
};
*/
return view;
}
}
请共享实现recyclerview的活动中的部分代码。@DharmeshG我已经在问题本身上发布了recyclerview实现的代码……请帮助我,我想您忘记初始化listner了。您必须在该行之前初始化侦听器,ticketsListAdapter=new ticketsListAdapter(getContext(),listner);我已经初始化了public类下的列表器。ticketsListAdapter.onclicklistner-listner;您有
ticketsListAdapter=newticketslistadapter(getContext(),listner)代码>然后创建listener.OMG的实例。它起作用了。在过去的两天里,我的头都碎了,你救了我。非常感谢你。
public class support_fragment extends Fragment {
FloatingActionButton create_support;
ticketsListAdapter.onclicklistner listner;
RecyclerView recyclerView;
ticketsListAdapter ticketsListAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_support, container, false);
create_support = view.findViewById(R.id.create_support);
recyclerView = view.findViewById(R.id.support_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(false);
//initialize the listner before using!
listner = new ticketsListAdapter.onclicklistner() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(getContext(), "Test", Toast.LENGTH_SHORT).show();
}
};
ticketsListAdapter = new ticketsListAdapter(getContext(), listner);
recyclerView.setAdapter(ticketsListAdapter);
create_support.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getContext(), Support_main_activity.class);
startActivity(i);
}
});
/*
listner = new ticketsListAdapter.onclicklistner() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(getContext(), "Test", Toast.LENGTH_SHORT).show();
}
};
*/
return view;
}
}