相关疑难解决方法(0)

使用FragmentPagerAdapter时如何获取现有片段

我有问题使我的片段通过Activity使用FragmentPagerAdapter,作为帮助类来实现对标签的管理以及连接ViewPager关联的所有细节TabHost.我的实现FragmentPagerAdapter与Android示例项目Support4Demos提供的一样.

主要问题是FragmentManager当我没有Id或Tag时,如何从特定片段中获取特定片段?FragmentPagerAdapter正在创建片段并自动生成Id和标签.

android android-fragments fragmentpageradapter

96
推荐指数
6
解决办法
7万
查看次数

Android获取FragmentPagerAdapter中的片段

我有以下问题:我有一个活动,其中我有两个选项卡,使用FragmentPagerAdapter作为片段 在某些时刻我想更改其中一个片段的视图,但我无法找到FragmentById()findFragmentByTag( )我无法设置id,因为我没有在XML中声明Fragment,因为FragmentPagerAdapter 当我尝试设置标记时,我遇到了以下问题:

08-15 21:46:23.805: E/AndroidRuntime(9297): java.lang.IllegalStateException: Can't  change tag of fragment Companies{416d7b78 id=0x7f04002e companies}: was companies now android:switcher:2130968622:1
Run Code Online (Sandbox Code Playgroud)

我的寻呼机FragmentPagerAdapter的代码:

public class TabsAdapter extends FragmentPagerAdapter implements    ActionBar.TabListener, ViewPager.OnPageChangeListener {
    private final FragmentActivity mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();


    final class TabInfo {
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args) {
            clss = _class;
            args = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmentpageradapter

34
推荐指数
3
解决办法
4万
查看次数

FragmentPagerAdapter与ViewPager和两个片段.转到第二个中的第一个并更新第一个文本

我不熟悉FragmentPagerAdapter,所以这将成为我们(你)批判性地阅读描述的问题之一.

结构:我有一个FragmentPagerAdapter(下面的代码),一次可以容纳两个片段.第一个显示书籍摘录,第二个显示书名列表.

目标:我想实现标题中描述的内容:用户可以导航到寻呼机中的第二个片段,单击标题,然后我想将用户移回第一个片段并告诉第一个片段更新文本.第一个片段有一个triggerRefresh方法.

代码:我相信我的问题发生是因为FragmentPagerAdapter重用/创建片段的方式(我不明白).这是我的班级:

static class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
        case 0:
            return new ExcerptsFragment();
        case 1:
            return new BookListFragment();
        default:
            throw new IllegalArgumentException("not this many fragments: " + position);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我创建相关成员的方式:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
Run Code Online (Sandbox Code Playgroud)

这就是我在我的活动中尝试过的其他内容,当我收到书名为Fragment并选择了标题的回调时:

mViewPager.setCurrentItem(0); …
Run Code Online (Sandbox Code Playgroud)

android updating android-fragments android-viewpager fragmentpageradapter

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

FragmentPagerAdapter不会在Orientation Change上恢复片段

编辑:我发现Activity正在保存实例,但Fragments保存的数据并没有使它保存到Activity savedInstanceState.我将当前时间保存在outState中,但它没有一路向上,因为活动在其SavedInstanceState中没有任何内容,并且如果我将其打印到logcat,则返回'null'. ..

我正在构建一个内置了countup和countdown计时器的应用程序.计时器的基本托管活动是FragmentActivity,它托管一个FragementPagerAdapter,它在代码中膨胀两个片段(我没有给XML中的片段提供id因为它们没有被定义为.xml中的片段.一切都很有效,直到方向改变,然后活动看起来像是失去了与旧片段的联系,只是选择创建新的片段.这意味着任何当前倒计时都会丢失,并且在配置更改时也会丢失所选择的任何时间.我需要保持计数(如果它开始)和当前显示的任何数字....

我知道适配器应该自己处理这些事情,我在OnCreate和OnCreateView中都设置了SetRetainInstance(true).

我把碎片放入Fragment代码,让我知道每当saveInstanceState为非null时,至少我知道发生了什么,但似乎实例总是为NULL,并且它从头开始创建...总是.

其他一些解决方案让我重写了instantiateItem,但似乎它仅用于重置回调,其他人更改Manifest中的设置(不赞成)....其他解决方案对我来说就像我有事情设置正确..但很明显,我在路上搞砸了一些东西.我只是为FragmentActivity,FragementPagerAdapter和一些片段代码提供代码,因为我不想使用可能不是问题的代码来垃圾邮件.

FragmentActivity

public class Timer_Main extends FragmentActivity {
    ViewPager pager;
    Timer_Pager mAdapter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timer_pager);

        mAdapter = new Timer_Pager(this, getSupportFragmentManager());

        pager = (ViewPager) findViewById(R.id.timer_pager_display);
        pager.setAdapter(mAdapter);

    }

    public static String getTitle(Context ctxt, int position) {
                // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("pageItem", pager.getCurrentItem());

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

    }
}    
Run Code Online (Sandbox Code Playgroud)

FragementPagerAdapter

public class Timer_Pager extends FragmentPagerAdapter{
    Context ctxt = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-fragmentactivity android-pageradapter

7
推荐指数
1
解决办法
5388
查看次数