我在试图弄清楚这一点时遇到了麻烦。我查看了 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 布局上?我的片段和支持是否正确编码到我只需要调用它以使其工作的地方?我难住了。
谢谢!