'FragmentTabHost`的替代方案?

时间:2014-07-13 19:23:59

标签: android xml android-fragments android-tabhost

我要做的是创建以下结构的布局:

-------------------------
|       Constant        |
|     LinearLayout      |  
|                       |
-------------------------
|          |            |
|   Tab1   |   Tab2     |
|          |            |
-------------------------
|                       |
|   Fragment's layout   |  
|     which switches    |
|     on tab click      |  
|                       |
|                       |
|                       |
-------------------------

然而,正如许多其他SO问题所提到的(据我所知,所有这些问题都没有答案),片段与标签重叠,而不是留在它们下面。我已经找到了一个答案并尝试了几种方法来解决这个问题,但没有任何方法适用于所有布局分辨率(即:我不想为标签设置一定的高度)。

所以我想知道,FragmentTabHost能够为我提供所需布局的最合适的替代方案是什么?

1 个答案:

答案 0 :(得分:0)

如果您希望绘图中的toplayout成为Appname或其他内容的位置或菜单,则已经有Actionbar来执行此操作。你不需要一个Linearlayout。

你真的想在那里有一个不属于Actionbar的自己的布局,无论出于什么原因,我都不确定是否有类似的东西能够完美无缺。也许更好的只是用按钮构建一个自己的Tabnavigation类型?

无论如何,在这里没有片段内部片段效果的工作布局是:

Fragment.xml&片段2&片段3(换成正确的名字)

public  class FragmentTab1 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.win_lang_dailyuse, container, false);


    return view;
}

}

Tablistener.xml

public  class MyTabListener  implements ActionBar.TabListener {
Fragment fragment;


public MyTabListener(Fragment fragment) {
    this.fragment = fragment;
}


public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_container, fragment);
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.remove(fragment);
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    // nothing done here
}

}

MainActivity.xml

public class MainActivity extends Activity {
ActionBar.Tab tab1, tab2, tab3;
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();
Fragment fragmentTab3 = new FragmentTab3();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_test);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    tab1 = actionBar.newTab().setText("Home");
    tab2 = actionBar.newTab().setText("Calculator");
    tab3 = actionBar.newTab().setText("Notebook");

    tab1.setTabListener(new MyTabListener(fragmentTab1));
    tab2.setTabListener(new MyTabListener(fragmentTab2));
    tab3.setTabListener(new MyTabListener(fragmentTab3));

    actionBar.addTab(tab1);
    actionBar.addTab(tab2);
    actionBar.addTab(tab3);
}

现在使用您想要的任何布局填充3个片段XML文件。