单击操作菜单项获取两个片段数据

时间:2014-04-02 14:44:49

标签: android android-fragments

就我而言,我使用了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数据。 非常感谢你。

1 个答案:

答案 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()定义一个界面,以片段形式实现它,这样您就可以从任何所需的片段中获取内容。