除非我关闭屏幕并打开

时间:2016-03-05 00:31:13

标签: android android-layout listview android-recyclerview

我的适配器工作正常,它显示我使用列表等给它的所有项目。唯一的问题是除非我打开和关闭设备屏幕,否则项目永远不会显示!只有这样才能调用onBindViewHolder方法。

我用来创建和设置适配器的代码。它使用EventBus库从另一个线程运行,因此runOnUiThread

@Subscribe
public void onMessageEvent(EchoListEvent event){

    final EchoListEvent eventt = event;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            final EchoListAdapter adapter = new EchoListAdapter(eventt.getList(), R.layout.location_item);
            final RecyclerView listview = (RecyclerView) findViewById(R.id.main_recycler_view);

            listview.setAdapter(adapter);

            LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            listview.setLayoutManager(layoutManager);

        }
    });

}

来自资源.xml的RecyclerView

<android.support.v7.widget.RecyclerView
    android:id="@+id/main_recycler_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

我还尝试使用Adapter#notifyDataSetChanged强制onBindViewHolder调用,但没有任何反应。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。基本上,我传递给事件的列表是由一个在另一个线程中运行的回调填充的。回调使用的API有点慢,因此列表仅在事件已发布后填充。解决方案是在发布事件之前等待回调完成

TL; DR:线程很难