我正在尝试创建并运行显示在的片段示例 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无法解析或不是字段
如何定义此资源?
感谢。
答案 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);
}
}
可以添加一些额外的代码行,以便单击一个已选择的项目不会执行任何操作,而只是用相同的信息重新创建和替换相同的片段。