我正在尝试基于Android API FragmentLayout创建一个简单的应用程序。我希望能够在我创建的一组扩展Fragment类的类之间切换,而不是更改简单的TextView。
我可以在layout.xml文件中静态创建我的任何示例,Fragment运行我想要的方式。我已经读过您无法替换以这种方式创建的片段,因此示例应用程序似乎相关,因为它动态加载详细信息文本。主要区别在于我不想只创建一个新的通用Fragment,我从文件中加载一些文本,我想加载整个类文件(同样,它们是Fragments本身并包含自己的SurfaveViews)。
这是我的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<fragment class="com.android.app.Examples$TitlesFragment"
android:id="@+id/titles" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/fragment_to_switch_dynamically" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
</LinearLayout>
以下是我尝试创建和更新的活动的相关方法
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);
if (mShownCheckPosition != mCurCheckPosition) {
// If we are not currently showing a fragment for the new
// position, we need to create and install a new one.
PApplet pa = getProcessingSketchByIndex(index);
// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = getFragmentManager()
.beginTransaction();
ft.replace(R.id.processing, pa);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
mShownCheckPosition = index;
}
} 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);
}
}
private PApplet getProcessingSketchByIndex(int index) {
PApplet pa = null;
switch (index) {
case 0:
pa = new Lights1();
break;
case 1:
pa = new Lights2();
break;
case 2:
pa = new Reflection();
break;
case 3:
pa = new Rotate();
break;
case 4:
pa = new Spot();
break;
case 5:
break;
default:
break;
}
return pa;
}
}
一切似乎都很顺利然后我得到了这个错误 :
E/AndroidRuntime(31393): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.processing.app/com.android.processing.app.ProcessingExamples}: java.lang.IllegalArgumentException: No view found for id 0x7f050001 for fragment Lights1{407bf678 #1 id=0x7f050001}
E/AndroidRuntime(31393): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
E/AndroidRuntime(31393): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
E/AndroidRuntime(31393): at android.app.ActivityThread.access$500(ActivityThread.java:122)
E/AndroidRuntime(31393): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
E/AndroidRuntime(31393): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(31393): at android.os.Looper.loop(Looper.java:132)
E/AndroidRuntime(31393): at android.app.ActivityThread.main(ActivityThread.java:4123)
E/AndroidRuntime(31393): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(31393): at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(31393): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime(31393): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime(31393): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(31393): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f050001 for fragment Lights1{407bf678 #1 id=0x7f050001}
E/AndroidRuntime(31393): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:770)
E/AndroidRuntime(31393): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977)
E/AndroidRuntime(31393): at android.app.BackStackRecord.run(BackStackRecord.java:638)
E/AndroidRuntime(31393): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1309)
E/AndroidRuntime(31393): at android.app.Activity.performStart(Activity.java:4406)
E/AndroidRuntime(31393): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1788)
E/AndroidRuntime(31393): ... 11 more
提前感谢任何帮助
答案 0 :(得分:1)
可能因为“R.id.processing”在视图的XML中不存在。
在你的XML中我看到了
<FrameLayout android:id="@+id/fragment_to_switch_dynamically">
那么可能将R.id.processing更改为R.id.fragment_to_switch_dynamically?