在oncreateview之前调用onpageselected更改定向



我有一个ViewPager与3片段;在我的主要活动中,我处理onPageChangeListener:

private class CustomPageChangeListener extends ViewPager.SimpleOnPageChangeListener{
    @Override
    public void onPageSelected(int position) {
        fragments.get(position).onShowedFragment(context);
        super.onPageSelected(position);
    }
}

调用onShowedFragment(context)将数据加载到fragment(我按需加载数据)。我正在将数据加载到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);
}

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

我没有使用android:configChanges

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

    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);
       
    }
}

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

databaseService = DatabaseService.getInstance(context);
mAdapter = new Capitulo100ListAdapter(context);
databaseService.capitulo100ObjectSet.setAdapter(mAdapter);

//如果list不为空,setAdapter.

   @Override
public void onShowedFragment(Context context) {
    if(lst!=null)
    lst100.setAdapter(mAdapter);
    try {
        //load my data
    } catch (Exception e) {
        //...
    }
    super.onShowedFragment(context);
}

//如果仍然不工作,使用MVVM架构组件,它将处理所有与活动娱乐相关的问题。

如果你想在片段显示给用户时调用一些方法,请使用setUserVisibleHint,当相应的片段显示时从适配器调用。

似乎你要么不初始化lst100后活动的娱乐或初始化它错误无论如何尝试在onShowedFragment本身获取ListView的引用。

@Override
public void onShowedFragment(Context context) {
    ...
    
    ListView listView = findViewById<ListView>(R.id.your_listview_id);
    listView.setAdapter(mAdapter);
    ...
    super.onShowedFragment(context);
}

最新更新