Android Fragment - 有关资源R.id.a_item定义的查询

时间:2014-02-27 17:24:26

标签: android android-fragments

我正在尝试创建并运行显示在的片段示例 http://developer.android.com/guide/components/fragment.html

我已阅读以下链接 Android Compatibility Package 并查看了googlesource存储库。

在TitlesFragment.java类的showDetails()方法中有一行     ft.replace(R.id.a_item); // ft.replace(int);但是我有以下错误

a_item无法解析或不是字段

如何定义此资源?

感谢。

3 个答案:

答案 0 :(得分:2)

也许,这是一个错误。答案就在这里 https://code.google.com/p/android/issues/detail?id=54837

链接消息的作者建议替换代码片段

if (index == 0) {
    ft.replace(R.id.details, details);
} else {
    ft.replace(R.id.a_item, details);
}

代码片段

if (index == 0) {
    ft.add(R.id.details, details);
} else {
    ft.replace(R.id.details, details);
}

或者只是

ft.replace(R.id.details, details);

答案 1 :(得分:0)

此ID应该是Fragment的ID,因为它出现在FragmentTransaction.replace()内。您应该定义id:

  • 在声明您的片段的布局文件中:<fragment class="...." id="@+id/a_item" />
  • 使用<item name="a_item" type="id" />
  • 在资源文件中
  • 或使用您定义的常量自定义a_item替换代码中的int

答案 2 :(得分:0)

请注意,大多数示例已过时,并且存在许多错误。如果您在同一示例中注意到,他们使用R.id.details使用findFragmentbyID,但是没有具有该ID的片段,则是具有该ID的FrameLayout。另外请注意,此示例中使用的API已弃用。

上面这样说,这就是showDetails方法的外观:

void showDetails(int index) {

        mCurCheckPosition = index;

        if (mDualPane) {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);


            // Make new fragment to show this selection.
            DetailsFragment details = DetailsFragment.newInstance(index);

            // Execute a transaction, replacing any existing fragment
            // with this one inside the frame.
            FragmentTransaction ft = getFragmentManager().beginTransaction();

            ft.replace(R.id.details, details);                               
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();

        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }
    }

可以添加一些额外的代码行,以便单击一个已选择的项目不会执行任何操作,而只是用相同的信息重新创建和替换相同的片段。