Android FragmentTabHost从操作栏活动的OnOptionsItemSelected

时间:2015-07-06 08:42:36

标签: android fragment-tab-host

我是Android开发的新手。我想在我的项目中使用Fragmenttabhost

在我的项目中,我有三个标签。每个标签有三个EditTextview

我想访问editText MainActivity's事件中的所有三个标签OnOptionsItemSelected值。

fragmentTab.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <HorizontalScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:fillViewport="true"
            android:scrollbars="none">
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom" />
        </HorizontalScrollView>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</android.support.v4.app.FragmentTabHost>

MainActivity

    public class FragmentTabs extends ActionBarActivity{
       private FragmentTabHost mTabHost;
       FragmentTab1 fragmentTab1;
       FragmentTab2 fragmentTab2;
       FragmentTab3 fragmentTab3;
        EditText tab1_ediTxt1,tab1_ediTxt2,tab1_ediTxt3;
    EditText tab2_ediTxt1,tab2_ediTxt2,tab2_ediTxt3;
    EditText tab3_ediTxt1,tab3_ediTxt2,tab3_ediTxt3;
         @Override
          protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);

            setContentView(R.layout.fragment_tabs);

             mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
             mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

             mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("Simple1"),
                                FragmentTab1.class, null);
             mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("Simple2"),
                                FragmentTab2.class, null);
            mTabHost.addTab(mTabHost.newTabSpec("Tab3").setIndicator("Simple3"),
                                FragmentTab3.class, null);

          }

          @Override
           public boolean onCreateOptionsMenu(Menu menu)
            {
                    MenuInflater menuInflater = getMenuInflater();
                    menuInflater.inflate(R.layout.menu, menu);
                    return true;
           }
           @Override
            public boolean onOptionsItemSelected(MenuItem item)
            {

              switch (item.getItemId())
              {
               case R.id.menu_save:
                 {
                 fragmentTab1=(FragmentTab1)SupportFragmentManager.FindFragmentByTag("Tab1");  
         fragmentTab2=(FragmentTab1)SupportFragmentManager.FindFragmentByTag("Tab2");   
         fragmentTab3=(FragmentTab1)SupportFragmentManager.FindFragmentByTag("Tab3");                      

           getTab1view();
           getTab2view();
            getTab3view();
            }
        }

public void getTab1view()
{
tab1_ediTxt1= (EditText)fragmentTab1.View.FindViewById(R.id.tab1_edittext1);
 tab1_ediTxt2= (EditText)fragmentTab1.View.FindViewById(R.id.tab1_edittext2);
tab1_ediTxt3= (EditText)fragmentTab1.View.FindViewById(R.id.tab1_edittext3);

}
public void getTab2view()
{
tab2_ediTxt1== (EditText)fragmentTab2.View.FindViewById(R.id.tab2_edittext1);
 tab2_ediTxt2== (EditText)fragmentTab2.View.FindViewById(R.id.tab2_edittext2);
tab2_ediTxt3== (EditText)fragmentTab2.View.FindViewById(R.id.tab2_edittext3);

}

public void getTab3view()
{
tab3_ediTxt1= (EditText)fragmentTab3.View.FindViewById(R.id.tab3_edittext1);
 tab3_ediTxt2= (EditText)fragmentTab3.View.FindViewById(R.id.tab3_edittext2);
tab3_ediTxt3= (EditText)fragmentTab3.View.FindViewById(R.id.tab3_edittext3);

 }
}

FragmentTab1

public class FragmentTab1 extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_layout, container,false);
        Editext editTxt1 = (Editext) v.findViewById(R.id.tab1_edittext1);
        Editext editTxt2 = (Editext) v.findViewById(R.id.tab1_edittext2);
        Editext editTxt3 = (Editext) v.findViewById(R.id.tab1_edittext3);
        return v;
    }
}

FragmentTab2 FragmentTab3 FragmentTab1 相同。

我可以访问当前所选标签的editText值。

(例如)假设当前选择第一个选项卡意味着我可以从选项卡访问所有edittext值,但剩下的第二个和第三个选项卡editText将返回null。

我只能使用FindFragmentbyTag访问visibile标签视图。 但无法访问未选中/不可见的标签视图

任何人都可以帮助我访问所有三个标签editetxt价值访问权限表MainActivity onOptionsItemSelected事件。

0 个答案:

没有答案