相关疑难解决方法(0)

如何确定片段何时在ViewPager中可见

问题:片段onResume()ViewPager片段实际可见之前被触发.

例如,我有2个片段与ViewPagerFragmentPagerAdapter.第二个片段仅供授权用户使用,我需要让用户在片段可见时登录(使用警告对话框).

但是ViewPager当第一个片段可见时创建第二个片段,以便缓存第二个片段,并在用户开始滑动时使其可见.

因此,onResume()事件在第二个片段变为可见之前就被触发了.这就是为什么我试图找到一个事件,当第二个片段变得可见时,它会在适当的时刻显示一个对话框.

如何才能做到这一点?

android android-fragments android-viewpager

728
推荐指数
13
解决办法
29万
查看次数

如何在使用ViewPager时处理ActionBarActivity片段中的AsyncTask?

我正在使用ActionBarActivity创建5个选项卡.我使用ViewPager在SectionsPagerAdapter中使用扩展FragmentPagerAdapter在5个选项卡之间滑动.每个选项卡都有一个带有asynctask的片段,在oncreateview方法中调用.当我在一个片段中时,正在调用其他片段中的asynctask.

我尝试在oncreateview方法中使用toast消息是每个片段而不是asynctask.但错误的片段中错误的吐司消息被触发了.

Oncreate方法代码:

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());


        mViewPager = (ViewPager) findViewById(R.id.pager_exp); 
        mViewPager.setAdapter(mSectionsPagerAdapter);


        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) 
                    {
                        actionBar.setSelectedNavigationItem(position);
                        actionBar.setTitle(getHomePageTitle(position)); 
                    }
                });


        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) 
        {
            // Create a tab with text corresponding to the page title defined by
            // the adapter. Also specify this Activity object, which implements
            // the TabListener interface, as the callback (listener) for when
            // this tab is selected.
            actionBar.addTab(actionBar.newTab()
                    .setIcon(getPagedrawable(i))
                    .setTabListener(this));

        }
Run Code Online (Sandbox Code Playgroud)

//适配器类代码:

public class …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask android-actionbar-compat android-actionbaractivity

15
推荐指数
1
解决办法
3848
查看次数

按需加载片段UI

问题:

我目前遇到一个问题,我的应用程序在首次打开时尝试加载太多片段。

我有BottomNavigationViewViewPager该负载4个片段-的每一个Fragment包含TabLayoutViewPager负载至少 2个片段。

可以想象,这是很多UI渲染(10多个片段)的-特别是当其中一些片段包含繁重的组件(如日历,条形图等)时。

当前提出的解决方案:

在需要片段时控制UI加载-因此,直到用户第一次访问该片段,才有理由加载它。

似乎肯定有可能,包括Play商店在内的许多应用都在这么做。请在此处查看示例

在上面的视频示例中-导航到选项卡后,正在加载UI组件。它甚至具有嵌入式的加载符号。

1)我试图弄清楚该怎么做-在什么时候我知道需要创建该片段UI还是已经创建了它?

2)另外,我将在其中启动UI创建过程的片段生命周期回调是什么?onResume()表示用户界面对用户可见,因此加载用户界面会很漫长和延迟。

希望这足够清楚。


编辑:
我已经在使用FragmentStatePagerAdapteras ViewPager适配器。我注意到super(fm)构造器中的方法现在已被弃用:

ViewPagerAdapter(FragmentManager fm) {
    super(fm); // this is deprecated
}
Run Code Online (Sandbox Code Playgroud)

所以我将其更改为:

ViewPagerAdapter(FragmentManager fm) {
    super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
Run Code Online (Sandbox Code Playgroud)

BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT:指示仅当前片段将处于Lifecycle.State.RESUMED状态。所有其他片段的上限为Lifecycle.State.STARTED。

这似乎是有用的作为onResume()Fragment时候才会被称为Fragment是对用户可见。可以通过某种方式使用此指示加载UI吗?

performance android android-fragments

8
推荐指数
1
解决办法
445
查看次数