我正在尝试实现Tab Navigation,但我想确保拥有旧版Android的人仍然可以使用我的应用程序 .
应用程序考虑到ATM非常简单,我只是想了解如何实现布局,然后我将添加缺少的位 .
无论如何,我有一个扩展 Fragment Activity 的容器活动(以确保兼容性),并且此活动使用 ActionBar 创建一个TabView(我相信我的问题存在于此处) . 该应用程序将尝试创建三个选项卡并将其添加到ActionBar,我想确保用户可以使用横向导航来回滚动 .
这是TabListener我试图实现:
public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(Activity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
这是我的导入,因为我想确保我使用的是支持库:
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.Menu;
但是,Eclipse给出了 TabListener 方法的问题 . 它告诉我以下内容:"The type LayoutContainer.TabListener must implement the inherited abstract method ActionBar.TabListener.onTabSelected(ActionBar.Tab, FragmentTransaction)"
当我选择 Add unimplemented methods 时,Eclipse基本上会添加 OnTabSelected OnTabReselected 和 OnTabUnselected 方法,但这一次,将Fragment( android..app.Fragment )的非支持版本作为参数传递 .
有关如何通过支持库进行另一个横向导航实现以确保兼容性的任何想法?
5 回答
标签监听器如下:
然后你为每个标签创建一个类:
但请记住,3.0以下的Android版本不支持操作栏 . 如果你想在旧版本中使用它,我建议你使用actionBarSherlock Library .
嗯 . 而Malek的作品并没有直接回答这个问题 .
您可以简单地忽略回调中获得的片段事务并使用您自己的片段事务:
只需确保您的活动是FragmentActivity,您就可以开始新的片段事务 .
另外,fragmentTransaction中的replace()方法比add()和remove()方便得多 .
关键是要使用
... 而不是 ...
这避免了Nelson Ramirez发布的聪明的解决方法 .
基于the official documentation的以下完整示例已经过测试,可以在Android 3.0,API 11中运行
我想实现@nelson-ramirez,但访问mActivity时出错,所以这是这两个答案的组合,适用于我的项目,它使用带有Facebook登录的标签导航(需要support.v4库) . 键是,创建一个私有的mActivity,然后在启动监听器时传入并分配,并创建自己的Fragment Transaction,而不是使用参数中的那个 . 此外,使用v4库将主活动更改为FragmentActivity,这允许访问getSupportFragmentManager() .
替代解决方案
截至2015年5月29日,您可以使用Android Design Support Library . 它包含Tab Layout并支持Android 2.1或更高版本的设备 .