Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NullPointerException:尝试调用接口方法';空对象引用上的void onclicklistner.onItemClick(int,android.view.view)_Java_Android_Android Recyclerview - Fatal编程技术网

java.lang.NullPointerException:尝试调用接口方法';空对象引用上的void onclicklistner.onItemClick(int,android.view.view)

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

因此,我用API设置了我的RecyclerView,它正在适配器上填充列表,但每次我单击列表项时,它都应该打开新活动并通过一个接口传递位置

单击会给我NullPointerException:

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;
 }
}