Android Lint 提示我可以用 <merge> 标签替换布局,但在片段事务中我需要布局的 id

7

我在安卓应用程序中使用了选项卡界面,并将FrameLayout作为主要布局。但是我收到了一个安卓Lint警告,上面写着:

This <FrameLayout> can be replaced with a <merge\> tag

我只在onTabSelected监听器中使用这个FrameLayout(名为fragmentContainer)。以下是一个简化版本。

@Override
public void onTabSelected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, show the tab contents in the
    // container
    Fragment fragment;
    String tag;
    switch (tab.getPosition()) {

    case 0:
        fragment = new myFragment1();
        tag = "myFragment1";
        break;

    case 1:
        fragment = new new myFragment2();
        tag = "myFragment2";
        break;

    default:
        Log.d(TAG, "invalid tab selected: " + tab.getPosition());
        break;
    }
    fragmentTransaction.replace(R.id.fragmentContainer, fragment, tag);
}

这段代码已经运行良好,但是如果可能的话,我希望能够进一步提高性能并消除任何Lint警告。如果我使用merge标签替换FrameLayout,则无法调用fragmentTransaction(),因为id在任何地方都不存在。

以下是FrameLayout的完整代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragmentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" />
1个回答

10
如果在您的Activity布局文件中只有这一个元素,请摆脱布局文件和您的setContentView()调用,并使用android.R.id.content作为FragmentTransaction的目标。android.R.id.content指向FrameLayout,是setContentView()展开的位置。
此外,请注意,操作栏选项卡在“L” Developer Preview中已弃用,并且应在Android的下一个正式发布版本中保持弃用状态。您可能希望考虑使用其他选项卡解决方案(例如ViewPager和选项卡指示器)或其他导航解决方案(例如导航抽屉)。

那很好用。感谢您的帮助(以及关于操作栏选项卡的令人沮丧的消息)。 - DruLang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接