标签: android-nested-fragment

NoSuchMethodError getChildFragmentManager()

我正在尝试使用FragmentPagerAdapter实现ViewPager,其中ViewPager本身位于片段内.我在文档中读到,应该可以使用最新的支持库和嵌套片段.原则上我希望PagerAdapter使用根片段的子片段管理器.

所以,我的项目使用ActionBarSherlock和SherlockFragments.由于与ActionBarSherlock捆绑在一起的支持lib根本没有包含方法getChildFragmentManager(),我下载了最新的支持库v4并将其放在ActionBarSherlock和我的项目的libs文件夹中.通过此更改,项目编译正常,但在第一次运行时,它会以关于getChildFragmentManager()的NoSuchMethodError退出.我在这做错了什么?

(Ps我用Android 2.2测试它,这是我的目标最低平台.)

谢谢!

已解决:我用我的项目和所有引用的库替换了最新版本的支持库.然后我清理了我的项目,但是我忘了清理并重建引用的库...这导致了这种奇特的行为.

android android-fragments actionbarsherlock android-support-library android-nested-fragment

20
推荐指数
1
解决办法
1万
查看次数

FragmentTabHost没有在android中的Fragment中创建视图

我在使用tabhost更改视图时遇到问题 - 当我选择一个选项卡时,内容保持空白.

据我所知,onCreateView没有被称为儿童碎片.onMenuCreate运行正常,因为菜单改变了它应该.

   public class PatientTabFragment extends Fragment {
    private FragmentTabHost mTabHost;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager());

        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Info"),
                NewPatientFragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Notes"),
                NoteListFragment.class, null);


        return mTabHost;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mTabHost = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-tabhost android-fragments fragment-tab-host android-nested-fragment

19
推荐指数
1
解决办法
7752
查看次数

嵌套片段和后栈

Back Stack是否支持与Android中嵌套片段的交互?

如果是的话,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后台堆栈的事实.我希望它不是因为嵌套片段的问题,而是我做错了什么.

以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

     MyFragment fragment = new MyFragment();
     FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
     ft.addToBackStack(null);
     ft.replace(R.id.myFragmentHolder, fragment);
     ft.commit();
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-nested-fragment

18
推荐指数
1
解决办法
2万
查看次数

从FragmentTabHost获取对嵌套片段的引用

在我的应用程序中,我使用了Activity一个Fragment包含FragmentTabHost它的所有选项卡nested Fragments.

内部的Activity,其保持Fragment与它nested Fragment,我们可以得到一个连接使用参考onAttachedFragment().

可是如何才能让一个参考nested FragmentFragmentTabHost

android android-tabhost android-fragments android-nested-fragment

18
推荐指数
2
解决办法
2万
查看次数

嵌套片段转换不正确

你好堆栈溢出的程序员!我已经度过了这个问题的好一周,现在我非常渴望一个解决方案.


场景

我正在使用android.app.Fragment,不要与支持片段混淆.

我有6个子片段命名为:

  • FragmentOne
  • FragmentTwo
  • FragmentThree
  • FragmentA
  • FragmentB
  • FragmentC

我有2个父片段命名:

  • FragmentNumeric
  • FragmentAlpha

我有1个名为的活动:

  • MainActivity

他们表现如下:

  • 子片段是仅显示视图的片段,它们不显示也不包含片段.
  • 父片段使用单个子片段填充其整个视图.他们能够用其他子片段替换子片段.
  • 该活动使用父片段填充其大部分视图.它可以用其他父片段替换它.因此,在任何时候屏幕只显示一个子片段.

你可能已经猜到了,

FragmentNumeric显示子片段FragmentOne,FragmentTwoFragmentThree.

FragmentAlpha显示子片段FragmentA,FragmentBFragmentC.


问题

我正在尝试过渡/动画父母和子女片段.儿童片段按预期顺利过渡.但是,当我转换到新的父片段时,它看起来很糟糕.子片段看起来像是从其父片段运行独立过渡.并且子片段看起来也像是从父片段中删除的.它的gif可以在这里查看https://imgur.com/kOAotvk.注意单击Show Alpha时会发生什么.

我能找到的最接近的问题和答案是:嵌套片段在过渡动画期间消失,但所有答案都不满意.


动画XML文件

我有以下动画效果(持续时间很长,用于测试目的):

fragment_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="4000"
        android:interpolator="@android:anim/linear_interpolator"
        android:propertyName="xFraction"
        android:valueFrom="1.0"
        android:valueTo="0" />
</set>
Run Code Online (Sandbox Code Playgroud)

fragment_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="4000"
        android:interpolator="@android:anim/linear_interpolator"
        android:propertyName="xFraction"
        android:valueFrom="0"
        android:valueTo="-1.0" />
</set>
Run Code Online (Sandbox Code Playgroud)

fragment_pop.xml

<?xml version="1.0" encoding="utf-8"?> …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmenttransaction android-nested-fragment fragment-animation

18
推荐指数
1
解决办法
1204
查看次数

getChildFragmentManager()和支持库

我正在使用getChildFragmentManager()针对API级别19进行编译的应用程序,并将最低SDK设置为14.

getChildFragmentManager()在API 17中引入,因此在API级别14,15或16运行的设备将在调用NoSuchMethodError方法时抛出.

我确实查看了有关此问题的所有其他StackOverflow问题,但它们似乎都没有回答这个问题:有没有办法让这个getChildFragmentManager()方法在API级别17之前的设备上运行?如果是这样,怎么样?

该方法似乎不包含在v4或v13支持库中.我已尝试使用v4和v13支持库的干净版本,但这似乎无法解决问题.

android android-fragments android-nested-fragment

16
推荐指数
1
解决办法
2万
查看次数

ViewPager里面的片段问题

我在查看寻呼机的问题是在一些片段内部.要使用视图寻呼机,我正在使用FragmentPagerAdapter.确定我收到 java.lang.IllegalStateException:尝试运行我的应用程序时递归进入executePendingTransactions异常.

大多数人都认为将FragmentPagerAdapter放在其他片段中是不可能的,所以如果这个问题无效,我很抱歉.我只是希望有人对这个问题及其可能的解决方案有一些新的想法.

PS我有一个建议在AsyncTask中设置适配器(我可以澄清这种情况,如果有人需要它),但这个解决方案有一些与恢复这样的片段状态相关的错误,所以它对我有用.

android android-fragments android-viewpager android-nested-fragment

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

Android片段动画onResume

情况如下:

我正在使用API​​ 17引入的子片段.说我有

ActivityA -> FragmentA
ActivityA -> FragmentB

FragmentA -> ChildFragmentA
FragmentA -> ChildFragmentB
Run Code Online (Sandbox Code Playgroud)

所以我正在使用FragmentTransaction ActivityA->FragmentA->ChildFragmentA转换到ActivityA->FragmentA->ChildFragmentB使用动画添加到backstack并弹出backstack(当我转到ChildFragmentB时会有动画,当我按下并移动到ChildFragmentA时会有动画).

现在我导航到ActivityA->FragmentB(FragmentA不再附加).当我导航回到ActivityA->FragmentA哪里ChildFragmentB是可见的,ChildFragmentB动画的,因为它从未来什么时候ChildFragmentA.

我想在恢复时禁用此动画Activity->FragmentA.但是在儿童片段之间转换时要保持它.此动画在FragmentTransaction中设置.有没有办法让这种情况发生?

android android-animation android-fragments android-nested-fragment

14
推荐指数
1
解决办法
1458
查看次数

将片段添加到对话框中

我想在对话框中添加一个片段(它可以是DialogFragment或常规Dialog).我怎么做?

这是我的DialogFragment:

public class MyDialogFragment extends DialogFragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyDialogFragment2 dialog = new MyDialogFragment2();
        View v = inflater.inflate(R.layout.news_articles, container, false);
        getActivity().getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, dialog).commit();
        return v;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是news_article.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

这是我的主要活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            MyDialogFragment dialog = new MyDialogFragment();
            dialog.show(getSupportFragmentManager(), "asdf");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试它时,我得到:

No view found for id 0x7f070002 for fragment MyDialogFragment2
Run Code Online (Sandbox Code Playgroud)

我想这是因为活动的FragmentManager是不是我应该增加,但我不能找到DialogFragment的一个,它在哪里?

android android-fragments android-dialogfragment android-nested-fragment

14
推荐指数
2
解决办法
1万
查看次数

DialogFrag#show()来自片段抛出"IllegalStateException:onSaveInstanceState后无法执行此操作"

为了清楚起见,我已经阅读了关于"IllegalStateException:在onSaveInstanceState之后无法执行此操作"的十几个SO问题,我已经阅读了Alex Lockwood的博客文章http://www.androiddesignpatterns.com/2013/08/片段事务提交状态-loss.html

所以我不是盲目地问这个.

我有一个非常简单的用例案例,涉及AsyncTask或任何后台处理.

我有一个包含按钮的片段.在按钮的onClickListener上,我创建了一个DialogFragment并显示它.

public final class OverviewFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.overview_fragment, container, false);

        startNewGameButton = (Button) view.findViewById(R.id.buttonNewGame);
        startNewGameButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final NewGameFragment dialogFrag = NewGameFragment.create(getApplication());
                dialogFrag.show(getFragmentManager(), NewGameFragment.FRAGMENT_TAG);
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

[NewGameFragment]

public final class NewGameFragment extends DialogFragment {

    public static final String FRAGMENT_TAG = "NewGameFragment";

    private static final String MESSAGE = "message";

    public static NewGameFragment …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments android-dialogfragment android-nested-fragment

14
推荐指数
1
解决办法
1982
查看次数