在oncreateview之前选择changeorientation call onpage

时间:2014-06-05 22:34:18

标签: android listview android-fragments android-viewpager

我有一个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)的调用将数据加载到片段中(我按需加载数据)。我将数据加载到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(我在片段的onCreateView方法中初始化视图),然后行lst100.setAdapter(mAdapter)导致错误。

我没有使用android:configChanges

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

3 个答案:

答案 0 :(得分:0)

var dem=element(by.className('LC20lb DKV0Md'));
var dce=element.all(by.tagName('a'));
dce.then(function(rse){
for(let i=0;i<rse.length;i++){
    console.log('1');
    rse.get(i).getText().then(function(elem){
        if(elem==dem){
            elem.click();
        }

    })
}

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

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

//如果列表不为空,则设置适配器。

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

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

答案 1 :(得分:0)

如果您想在每次向用户显示片段时调用某个方法,请使用 setUserVisibleHint,每当显示相应的片段时从适配器调用。

答案 2 :(得分:0)

似乎您在活动重新创建后没有初始化 lst100 或初始化错误无论如何尝试在 onShowedFragment 本身中获取对 ListView 的引用。

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

    ...
    super.onShowedFragment(context);
}