当前位置: 首页 > 知识库问答 >
问题:

返回null

商同化
2023-03-14

我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。

适配器:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private ArrayList<String> array;
    private RecyclerViewClickListener listener;

    public MyAdapter( ArrayList<String> arrays, RecyclerViewClickListener listener)
    {
        this.listener = listener;
        this.array = arrays;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.textView.setText(array.get(position));
    }

    @Override
    public int getItemCount() {

        return array.size();
    }

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

        public TextView textView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            textView = itemView.findViewById(R.id.text_card);
            itemView.setOnClickListener(this);
            System.out.println(itemView);
        }

        @Override
        public void onClick(View v) {
            System.out.println(listener);
            System.out.println(v);
            System.out.println(getAdapterPosition());
            listener.onClick(v, getAdapterPosition());
        }
    }

    public interface  RecyclerViewClickListener{
        void onClick(View v, int position);
    }

}

第一项活动:

ArrayList<String> list_of_name= new ArrayList<>();
private RecyclerView recyclerView;
    private MyAdapter.RecyclerViewClickListener listener;

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acticity1);
        recyclerView = findViewById(R.id.recyclerView);
     
          list();
        
    }

 public void list() {

        MyAdapter myAdapter = new MyAdapter(list_of_name, listener);
        recyclerView.setAdapter(myAdapter);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));


        listener = (v, position) -> {
           
            itemPosition = list_of_name.get(position);
            Syste.out.println(itemPosition );
        };
    }

第二项活动:

    private RecyclerView recyclerView;
    private MyAdapter.RecyclerViewClickListener listener;
    ArrayList<String> list2= new ArrayList<>();

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acticity2);

        recyclerView = findViewById(R.id.recyclerView1);

        File internalStorageDir = getFilesDir();
        File alice = new File(internalStorageDir, "file/");

        for (File file : alice.listFiles()) {
            list2.add(0, file.getName());
        }

        view();
    }

    public void view()
    {
        MyAdapter adapter = new MyAdapter(list2, listener);
        recyclerView.setAdapter(adapter);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        listener = (v, position) -> {
            itemPosition = list2.get(position);
            Syste.out.println(itemPosition );
        };
    }

错误:

I/System.out: null
    android.widget.LinearLayout{ecdf5a1 VFE...C.. ...P.... 0,0-1080,167}
    0
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 28268
    java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.myapplication.recycler.MyAdapter$RecyclerViewClickListener.onClick(android.view.View, int)' on a null object reference
        at com.example.myapplication.recycler.MyAdapter$MyViewHolder.onClick(MyAdapter.java:59)
        at android.view.View.performClick(View.java:7185)
        at android.view.View.performClickInternal(View.java:7162)
        at android.view.View.access$3500(View.java:819)
        at android.view.View$PerformClick.run(View.java:27684)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/MQSEventManagerDelegate: failed to get MQSService.

我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null

共有1个答案

陈季
2023-03-14
public void list() {

        MyAdapter myAdapter = new MyAdapter(list_of_name, listener);
        recyclerView.setAdapter(myAdapter);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));


        listener = (v, position) -> {
           
            itemPosition = list_of_name.get(position);
            System.out.println(itemPosition );
        };
    }

这就是问题所在。首先传递侦听器,然后再初始化它。这导致它为空。你为什么不试试这个

public void list() {

        listener = (v, position) -> {

            itemPosition = list_of_name.get(position);
            System.out.println(itemPosition );
        };

        MyAdapter myAdapter = new MyAdapter(list_of_name, listener);
        recyclerView.setAdapter(myAdapter);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this);
    }
 类似资料:
  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

  • 加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur

  • 问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是

  • 问题内容: 我正在使用Servlets&Struts2的混合情况下工作。 我正在调用HTTPServlet,并且正在处理数据。 然后,我需要调用struts API在DB中插入数据。 在那我也使用HTTPSession。 所以我打电话 要获取HttpRequest,然后在该struts动作类中进行会话。 Servlet正在调用Struts Action类。 但 始终返回NULL。 是因为它没有被网