android碎片活动,Android:像碎片一样的活动向导

我在这里和其他网站上阅读了很多,但似乎没有人有使用片段作为向导一样的应用程序的工作解决方案。

我试图实现一个,但目前遇到了一些问题。

这里是活动XML与占位符步片段:

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/fragment_container"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_above="@+id/cmd_previous"

android:layout_alignParentTop="true" >

android:id="@+id/cmd_previous"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_alignParentLeft="true"

android:layout_alignRight="@+id/center_separator_buttons"

android:text="@string/rpz_cmd_perv" />

android:id="@+id/center_separator_buttons"

style="@style/wd_center_aligner"

android:layout_alignParentBottom="true" />

android:id="@+id/cmd_next"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/center_separator_buttons"

android:layout_alignParentBottom="true"

android:layout_alignParentRight="true"

android:text="@string/rpz_cmd_next" />

在OnCreate中我添加的第一个步骤的活动:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_report_wizard);

if (this.getIntent().getExtras() != null) {

Bundle extra = this.getIntent().getExtras();

if (extra.containsKey(ISelected.ID_KEY)) {

_ID = extra.getLong(ISelected.ID_KEY);

}

}

if (findViewById(R.id.fragment_container) != null && savedInstanceState == null) {

_ReportTypeAndName = new ReportWizardTypeAndNameFragment();

_ReportTypeAndName.setArguments(getIntent().getExtras());

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, _ReportTypeAndName).commit();

}

}

下一按钮,替换当前片段新的一个。这似乎工作正常。

private void runNext(View view) {

switch (_CurrentPage) {

case ReportTypeAndName:

_ReportSelect = new ReportWizardSelectFragment();

_ReportSelect.setArguments(getIntent().getExtras());

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, _ReportSelect).addToBackStack(null).commit();

_CurrentPage = ReportWizardPage.ReportSelect;

break;

case ReportSelect:

_CurrentPage = ReportWizardPage.ReportPreview;

break;

case ReportPreview:

_CurrentPage = ReportWizardPage.None;

break;

default:

break;

}

}

但是在PREVIOUS-Button上,这是行不通的。

private void runPrevious(View view) {

switch (_CurrentPage) {

case ReportTypeAndName:

// Umstellung des Typs

_CurrentPage = ReportWizardPage.None;

this.finish();

break;

case ReportSelect:

_ReportTypeAndName = new ReportWizardTypeAndNameFragment();

_ReportTypeAndName.setArguments(getIntent().getExtras());

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, _ReportTypeAndName).commit();

_CurrentPage = ReportWizardPage.ReportTypeAndName;

break;

case ReportPreview:

_CurrentPage = ReportWizardPage.ReportSelect;

break;

default:

break;

}

}

我得到了以下错误(logcat的):

FATAL EXCEPTION: main

android.view.InflateException: Binary XML file line #13: Error inflating class fragment

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)

at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)

at android.view.LayoutInflater.inflate(LayoutInflater.java:489)

at android.view.LayoutInflater.inflate(LayoutInflater.java:396)

at de.webducer.android.worktime.beta.ui.fragment.ReportWizardTypeAndNameFragment.onCreateView(ReportWizardTypeAndNameFragment.java:40)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)

at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)

at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)

at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)

at android.os.Handler.handleCallback(Handler.java:605)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:4424)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:511)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f05008b, tag null, or parent id 0x0 with another fragment for de.webducer.android.worktime.beta.ui.fragment.ReportTypeSelectorSpinnerFragment

at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:275)

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)

... 18 more

片段的第40行是他们的充气

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

return inflater.inflate(R.layout.frag_report_wizard_1, container, false);

}

如何我可以绑定(添加/删除)片段没有得到重复的ID?或者我怎样才能重新使用片段没有新的视图初始化?

2012-06-06

WebDucer

+0

看看“造成”部分......它指向其他地方。发布'ReportTypeSelectorSpinnerFragment',也许我们可以搞清楚。 –

你可能感兴趣的:(android碎片活动)