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

RecyclerView:未附加适配器;使用改版跳过应用程序中的布局[重复]

顾昌翰
2023-03-14

我有一个简单的程序连接到一个API并从中获取一些数据。我使用reverfitlibrary,有两个activity。mainactivity包含一个recyclerview,显示从服务器接收到的数据。如果按任何项,应用程序将转到UserInfoActivity并显示该项的详细信息。当转到UserInfoActivity几秒钟后,我的应用程序崩溃,并且不显示信息。但是,响应正确接收,但程序在txtid.settext(user.getid)行上给出错误。错误为e/recyclerView:未附加适配器;跳过布局实际上,我的问题是在第二个activity中调用调用 getUserInfo(@path(“id”)int id); 时开始的。

这是mainactivity代码。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    userRequest();
}

private void userRequest(){
    APIInterface apiInterface= APIClient.getClient().create(APIInterface.class);
    retrofit2.Call<ArrayList<User>> call= apiInterface.getUsers();
    call.enqueue(new Callback<ArrayList<User>>() {
        @Override
        public void onResponse(retrofit2.Call<ArrayList<User>> call, Response<ArrayList<User>> response) {
            if(response.isSuccessful()){
                ArrayList<User> users = response.body();
                setupRecycelerView(users);
            }
        }
        @Override
        public void onFailure(retrofit2.Call<ArrayList<User>> call, Throwable t) {
            Log.i("RETROFIT","response not successful");
        }
    });
}

private void setupRecycelerView(ArrayList<User> users){
    recyclerView=findViewById(R.id.RcyView);
    adapter=new RecycelerAdapter(this,users);
    linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
    recyclerView.setAdapter(adapter);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

}

这是RecycelerAdapterOnBindViewHolder函数。

 public void onBindViewHolder(@NonNull UserViewHolder holder, int position) {
    final User user=values.get(position);
    holder.txtName.setText(user.getName());
    holder.txtPhone.setText(user.getPhone());
    final Intent intent=new Intent(context, UserInfoActivity.class);
    intent.putExtra("user",user);
    holder.root.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            context.startActivity(intent);
        }
    });
}

这是userinfoactivity代码。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_info);
    txtId=findViewById(R.id.txtId);
    txtName=findViewById(R.id.txtName);
    txtPhone=findViewById(R.id.txtPhone);
    Intent intent=getIntent();
    User user=(User)intent.getSerializableExtra("user");
    id=user.getId();
    userInfoRequest();
}
private void userInfoRequest(){
    APIInterface apiInterface= APIClient.getClient().create(APIInterface.class);
    retrofit2.Call<User> call= apiInterface.getUserInfo(id);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            if(response.isSuccessful()){
                User user=response.body();
                Log.e("MF","ON Response");
                Log.e("MF",user.getName());
                Log.e("MF",user.getPhone());
                txtId.setText(user.getId());
                txtName.setText(user.getName());
                txtPhone.setText(user.getPhone());
            }
        }
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            Log.e("MF","on failure");
        }
    });

}

共有1个答案

钦高峯
2023-03-14

试试看:

linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(linearLayoutManager);
adapter=new RecycelerAdapter(this,users);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
recyclerView.setHasFixedSize(true);
recyclerView.setItemAnimator(new DefaultItemAnimator());

使用NotifyDataSetChanged()告知RecycerView数据已更改-添加,并在SetLayoutManager之后设置适配器

如果这没有帮助,请初始化oncreate方法中的recyclerView并使用runonuithreadonresponse中设置适配器如下所示:

runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                    //Do something on UiThread
                   ArrayList<User> users = response.body();
                   adapter=new RecycelerAdapter(this,users);
                   recyclerView.setAdapter(users);
                }
            });

然后调用NotifyDataSetChanged(),然后它应该可以工作。

 类似资料:
  • 我一直在stackoverflow和这篇博文上阅读不同的答案,并试图实现它们的解决方案,但我仍然得到错误: 片段中的布局: 和项目的布局: 我做错了什么? 编辑:以下是适配器:

  • 我收到以下错误:“RecyclerView:未附加适配器;跳过布局”但我已附加适配器...我试过很多不同的方法,但都解决不了这个错误。 我正在使用Volley库获取数据。当我启动activity时,直到结束只有进度条可见,并且收到上面的Logcat消息。我已经在中添加了带有适配器的。你能帮帮我吗? 下面是我的代码: 主要活动 地震适配器 mainactivity.xml EquestakerAw.

  • 我正在使用一个片段来查看一个RecyclerView。但我总是犯这个错误 E/RecyclerView:未附加适配器;跳过布局 我已经为我的recyclerview创建了一个适配器,但布局没有显示。php后端运行良好。谁能帮帮我。下面是我的片段和适配器代码 Tips.java TipAdapter.java

  • 我已经提到了相当少的帖子关于这个错误,但没有一个能够解决我的问题。我有一个片断,在这里我使用修改获得了我的值,我已经在下面显示了: 下面是我的RecyclerView适配器类:

  • 我的应用程序正在正确地从parse.com获取信息,但没有像以前那样在recyclerview中正确地显示信息。系统提示我错误消息“no adapter attached;skipping layout”,并且recyclerview仍然为空。请你检查一下我的程序并通知我任何我可能错过的错误好吗? $ $

  • 大家晚上好,我一直在寻找一个解决方案,以解决android studio的日志发送错误,使用RecyclerView显示JSON“产品”列表,并进行了改装。 我已经阅读了与此错误相关的问题,但我无法找到符合我需求的正确答案。 Android:回收人员视图:没有附加适配器;跳过布局 未连接适配器;跳过布局回收视图错误 recyclerview未连接适配器;跳过布局 未连接适配器;跳过布局onCrea