2016-07-07 91 views
0

它给我“RecyclerView:没有适配器连接;跳过布局”错误,但在我看来适配器是正确连接。请帮忙。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); 
    } 
} 

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

+0

发表您的完整代码和logcat也 –

回答

0

试着把这行:

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

添加LayoutManagerRecyclerView后。当然,该列表将是空的,只是初始化RecyclerAdapter并将其分配给RecyclerView

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

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

最后的命令添加元素到RecyclerView的适配器并通知LayoutManager的变化。

0

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

setLayoutManager

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

将这个两行onResponse,您可以西尔设置一个新的适配卡或更新数据,其中取决于具体的实现适配器。

+0

对不起,但它不工作:/我在布局管理器之前/之后像布局管理器之前/之后移动适配器,但它不工作 – Tom

+0

我layoutAdapter之前layoutManager和错误消失,但应用程序不工作,它只显示空格和日志猫是明确的:/ https://scontent-fra3-1.xx.fbcdn.net/v/t34.0-12/13624505_1107401415965387_789590380_n.png?oh=a78e6331d61e135edd4cd9c757b85698&oe=577F9CFC – Tom

+0

你应该在onResponse中保留'setAdapter'(这意味着两个调用),或者在适配器中更新你的列表并调用notifyDataSetChaged()'' – Joshua

相关问题