在 oncreateview 之前调用 onpageselected 的 changeorientation 调用

Ado*_*oro 7 android listview android-fragments android-viewpager

我有ViewPager3 个片段;在我处理的主要活动中onPageChangeListener

private class CustomPageChangeListener extends ViewPager.SimpleOnPageChangeListener{

    @Override
    public void onPageSelected(int position) {

        fragments.get(position).onShowedFragment(context);
        super.onPageSelected(position);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用onShowedFragment(context)将数据加载到片段中(我按需加载数据)。我将数据加载到一个ListView

@Override
public void onShowedFragment(Context context) {
    databaseService = DatabaseService.getInstance(context);
    mAdapter = new Capitulo100ListAdapter(context);
    databaseService.capitulo100ObjectSet.setAdapter(mAdapter);
    lst100.setAdapter(mAdapter);

    try {
        //load my data
    } catch (Exception e) {
        //...
    }
    super.onShowedFragment(context);
}
Run Code Online (Sandbox Code Playgroud)

当我旋转设备时,Android 重新创建 Activity 并调用onPageSelected,并调用onShowedFragment我片段上的方法,但当时调用lst100的 ListView为空(我在片段的 onCreateView 方法中初始化视图),然后该行lst100.setAdapter(mAdapter)导致一个错误。

我没有使用 android:configChanges

在设备旋转后创建 ListView 时,如何上传我的数据?

and*_*ner 0

    private class CustomPageChangeListener extends ViewPager.SimpleOnPageChangeListener{

    @Override
    public void onPageSelected(int position) {
        // call super.onPageSelected() before onShowedFragment()
        super.onPageSelected(position);
        fragments.get(position).onShowedFragment(context);
       
    }
}
Run Code Online (Sandbox Code Playgroud)

//在onCreateView()中初始化视图

databaseService = DatabaseService.getInstance(context);
mAdapter = new Capitulo100ListAdapter(context);
databaseService.capitulo100ObjectSet.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)

//如果列表不为空,则setAdapter。

   @Override
public void onShowedFragment(Context context) {
    if(lst!=null)
    lst100.setAdapter(mAdapter);

    try {
        //load my data
    } catch (Exception e) {
        //...
    }
    super.onShowedFragment(context);
}
Run Code Online (Sandbox Code Playgroud)

//如果仍然不起作用,请使用 MVVM 架构组件。它将处理与活动重新创建相关的所有问题。