【问题标题】:RecyclerView: No adapter attached; skipping layout - recycleView error [duplicate]RecyclerView:没有附加适配器;跳过布局 - recycleView 错误 [重复]
【发布时间】:2016-07-07 09:25:45
【问题描述】:

它给了我“RecyclerView:未连接适配器;跳过布局”错误,但我认为适配器已正确连接。请帮忙。

    public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";
    private RecyclerView recyclerView;
    private LinearLayoutManager layoutManager;
    private RecyclerViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
        layoutManager = new LinearLayoutManager(MainActivity.this);
        recyclerView.setLayoutManager(layoutManager);
        requestJsonObject();
    }

    private void requestJsonObject(){
        RequestQueue queue = Volley.newRequestQueue(this);
        String url ="https://api.myjson.com/bins/2t4j3";
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Response " + response);
                GsonBuilder builder = new GsonBuilder();
                Gson mGson = builder.create();
                List<ItemObject> posts = new ArrayList<ItemObject>();
                posts = Arrays.asList(mGson.fromJson(response, ItemObject[].class));
                adapter = new RecyclerViewAdapter(MainActivity.this, posts);
                recyclerView.setAdapter(adapter);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error " + error.getMessage());
            }
        });
        queue.add(stringRequest);
    }
}

我正在移动我的方法,但它不起作用。我在这里寻找答案,但只有错误实施的适配器存在问题。我不知道这里出了什么问题。

【问题讨论】:

  • 发布您的完整代码和 logcat 也

标签: java android android-recyclerview


【解决方案1】:

试着写下这一行:

adapter = new RecyclerViewAdapter(MainActivity.this, posts);

LayoutManager 添加到RecyclerView 之后。当然列表是空的,但只需初始化RecyclerAdapter并将其分配给RecyclerView

然后,当Volley 完成它的请求时,使用:

recyclerView.getAdapter().addAll(posts);
recyclerView.getAdapter().notifyDataSetChaged();

最后的命令将元素添加到RecyclerView 的适配器,并将更改通知LayoutManager

【讨论】:

    【解决方案2】:

    您正在延迟线程中调用setAdapter。在主线程中创建视图时,Recyclerview 没有适配器。

    将这两行放在setLayoutManager之前

    List<ItemObject> posts = new ArrayList<ItemObject>();
    adapter = new RecyclerViewAdapter(MainActivity.this, posts);
    

    onResponse 中,您可以设置新的适配器或更新适配器中的数据,具体取决于您的实现。

    【讨论】:

    • 很抱歉,它不工作:/我在几个不同的地方移动适配器,比如布局管理器之前/之后,但它不工作
    • 我在 layoutManager 之前 setAdapter 并且错误消失但应用程序无法正常工作,它只显示空白和日志 cat 很清晰:/ scontent-fra3-1.xx.fbcdn.net/v/t34.0-12/…
    • 您应该在 onResponse 中保留setAdapter(这意味着两次调用)或在适配器中更新您的列表并调用 notifyDataSetChaged()``
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2015-10-24
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多