2

我在试图弄清楚这一点时遇到了麻烦。我查看了 SampleFragments ABS 应用程序,它使用 TabHost 和自定义侦听器来完成此操作。这是我唯一的选择还是我可以让它按我的方式工作试图让它工作..(我想使用默认的 TabNav,因为它在横向模式下覆盖在 ActionBar 上以节省屏幕空间。

主要活动:

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //create Tab Nav
    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

    bar.addTab(bar.newTab()
            .setText("Tab1")
            .setTabListener(this));        
    bar.addTab(bar.newTab()
            .setText("Tab2")
            .setTabListener(this)); 
    bar.addTab(bar.newTab()
            .setText("Tab3")
            .setTabListener(this));
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction transaction) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {

    FrameLayout frame = (FrameLayout) findViewById(R.id.tabcontent);
    if (tab.getText() == "Tab2")
    {           
        frame.setBackgroundColor(0xFF00FF00);
    }
    if (tab.getText() == "Tab1")
    {
        frame.setBackgroundColor(0xFFFFFFFF);
    }        
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
} 
}

支持和碎片活动

public class TestSupport extends SherlockFragmentActivity{

public static Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn = (Button) findViewById(R.id.buttonOMG);

    FragmentManager fm = getSupportFragmentManager();

    // Create the list fragment and add it as our sole content.
    if (fm.findFragmentById(android.R.id.tabcontent) == null) {
        MapsFragment list = new MapsFragment();
        fm.beginTransaction().add(android.R.id.tabcontent, list).commit();
    }
}

public static class TestFragment extends SherlockListFragment {

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

        //setHasOptionsMenu(true);
        btn.setText("LOL");            

    }
}
}

主.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#CCC">

<FrameLayout
        android:id="@+id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    <Button
        android:id="@+id/buttonOMG"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</FrameLayout>
</LinearLayout>

我只是使用按钮文本的更改作为指标来查看它是否正确实现..

我遇到的问题是在 onTabSelected 类中。如何调用片段执行并使其显示在 tabcontent 布局上?我的片段和支持是否正确编码到我只需要调用它以使其工作的地方?我难住了。

谢谢!

4

0 回答 0