相关疑难解决方法(0)

获取片段的容器视图ID

我添加了一个片段

transaction.add(R.id.content, fragment, null);
Run Code Online (Sandbox Code Playgroud)

我需要从这个开始新的片段.但要做到这一点,我需要知道第一个片段的容器视图ID(在我的例子中是R.id.content).我怎么能得到这个?

我可以直接使用这个id,但我想片段不应该知道有关父活动的这类细节.例如,在这种情况下,不可能在另一个活动中使用此片段.

可能是从另一个"起始"片段是一个不好的做法,所有片段处理逻辑应该由活动本身处理?但是创建好的片段序列相互启动似乎非常有用(例如detalView-> moreDetailView-> evenMoreDetailView).

containers android android-fragments android-view

33
推荐指数
4
解决办法
7万
查看次数

以前的片段在新片段下可见

我有一个标签+ ViewPager布局,在其中一个标签中我有一个列表视图.当我在onclick上替换该列表片段时,我仍然可以看到新片段下的旧片段.看到:

在此输入图像描述

码:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
HallsInStateFragment hallsForState = new HallsInStateFragment();        
transaction.replace(R.id.container, hallsForState);
transaction.addToBackStack(null);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

其中R.id.container是视图中的FrameLayout.

android android-viewpager android-actionbar

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

替换片段仍然可见

当我启动我的应用程序时,它会运行一个AsyncTask加载然后进入onPostExecute,然后setContentView进入新布局然后添加一个带有两个按钮的片段,通过添加提供两种模式FragmentTransaction.单击两种模式中的一种后,它会FragmentTransaction使用replace方法将片段替换为另一种模式.

如果应用程序崩溃,它将返回第一个屏幕,加载提供两种模式的两个按钮.在这种情况下,如果选择了任一模式,则加载第二个片段,但现在背景突然透明,显示下面的两个按钮,它们仍然可以点击.如果再次单击它们,它们会正确替换片段,以便在下面看不到它.这很奇怪,我无法理解是什么原因引起的.

我研究并看到了这两个类似的问题,一个两个,这表明它可能是因为ID错误或者我用XML定义了片段.这两个因素都不是这样的.

我的代码如下所示:

下面我更换加载屏幕.

@Override
    protected void onPostExecute(Void result) {
        setContentView(R.layout.activity_main_screen);
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        transaction.add(R.id.fragment_container, new ModeFragment())
                .commit();
            }
Run Code Online (Sandbox Code Playgroud)

之后,当单击一个按钮时,我将希望替换当前的片段传递给下面的方法:

private void replaceCurrentFragment(Fragment fragment) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.fragment_container, fragment)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .addToBackStack(null).commit();
}
Run Code Online (Sandbox Code Playgroud)

这是第一次工作,但是如果发生崩溃,那么应用程序返回到第一个片段,第二次传递此方法时,新的替换片段是半不可见的.单击第一个片段上的按钮再次调用此方法,现在它已经很好了.

显然我不希望应用程序崩溃,所以这不应该发生,但我觉得我的编写代码的方式有问题.

android fragment

10
推荐指数
1
解决办法
5641
查看次数