就我而言,我使用了FragmentActivity并包含两页片段。 通过这种方式初始化。
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a DummySectionFragment (defined as a static inner class
// below) with the page number as its lone argument.
switch (position) {
case 0:
return new Fragment1();
case 1:
return new Fragment2();
}
return null;
}
操作栏项目定义如下:
<item
android:id="@+id/item_edit"
android:icon="@android:drawable/ic_menu_edit"
android:showAsAction="ifRoom"
android:title="Edit"/>
<item
android:id="@+id/item_save"
android:icon="@android:drawable/ic_menu_save"
android:showAsAction="withText|always"
android:title="Save"/>
例如:我在Fragment 1有一个edittext,在Fragment 2有一个edittext。
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/editText2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
然后问题是当我点击保存操作栏项时,如何从两个片段中获取edittext数据。 非常感谢你。
答案 0 :(得分:1)
一种解决方案是通过覆盖片段来定义片段本身的操作栏项,而不是宿主FragmentActivity。 onCreateOptionsMenu
在这种情况下,您只需覆盖片段内的onOptionsItemSelected
即可直接访问EditText
。
第二个解决方案是定义这样的方法:
class Fragment2 extends Fragment {
// ... some code here
public CharSequence getText() {
return getView().findViewById(R.id.edittext2).getText();
}
// ... some code here
}
并在活动中按以下方式访问它:
Fragment fragment = getItem(1);
// ... some code here
// user clicked menu item:
if(fragment instanceof Fragment2) {
CharSequence text = ((Fragment2)fragment).getText();
// do whatever you want with text
}
此外,您可以使用getText()
定义一个界面,以片段形式实现它,这样您就可以从任何所需的片段中获取内容。