ListFragment onCreate()显示不正确,onResume()后显示正常

ListFragment does not display correctly onCreate(), but is ok after onResume()

我的活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //list is global var
    list = (MyListFragment) getFragmentManager().findFragmentById(com.myapp.R.id.mainActivity_myListFragment);
    //add all objects to list
    list.getListView().invalidateViews();
}

@Override
protected void onResume(){
    super.onResume();
    list.getListView().invalidateViews();
}

MyListFragment

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    MyAdapter adapter = new MyAdapter(new ArrayList());
    setListAdapter(adapter);
}

public View getView(int position, View convertView, ViewGroup container) {
    View view = super.getView(position, convertView, container);
    TextView main = (TextView) view.findViewById(mylibs.common.R.list_main);
    TextView sub = (TextView) view.findViewById(mylibs.common.R.list_sub);
    ImageView image = (ImageView) view.findViewById(mylibs.common.R.list_image);

    //set the View content here.
}

问题是,我无法正确显示第一个运行。但是,如果 onResume() 被 Android 调用,则一切都显示得很好。我该如何解决?

列表中的第一项始终正确显示,只有列表的其余部分有问题。

onCreate()之后调试getView()的时候,明明在getView()方法中设置了TextView和ImageView我想要的数据,但是不显示它没有显示我想要的数据,而是显示 ObjecttoString() String,它位于 TextView 之一的 Adapter 中,所有其他的都留空。

Android 很糟糕,这是在浪费时间。

我还在寻找答案,但解决方法是创建一个新线程,休眠 1ms,然后 runonUIThread() invalidateViews().

您在这里做的一些事情很可能是问题的根源:

A) 片段在您的 Activity 的 onCreate() 函数期间不会膨胀,因此您无法在那里访问它们。这里的最佳实践是在片段自己的 onCreateView() 生命周期回调期间访问/操作片段视图。这是它们在屏幕上膨胀之前的点,所以是完美的点。您创建的 activity 和片段应该相对独立。碎片应该是可重复使用的。例如,如果您在 X 多个活动中需要此片段,您会怎么做?

B) 我觉得你的 getView() 很可疑。列表视图通常由 xml 中的 listview 视图组、适配器(由 onCreateView() 实例化)、列表视图将包含的对象模型集合以及单独的xml 具有定义列表中每个单元格的视图。 getView() 通常是您在适配器 中覆盖 的函数(使用视图持有者模式),您可以在其中访问和填充构成来自单独 [=34 的单元格的视图=].

也许你已经正确设置了它,但你给我们的东西读起来并不像它(适配器绝对不应该设置在片段的 onCreate() 中)。

Vogella has a nice tutorial 列表视图。祝你好运!