1
我目前正在開發一個android項目,並已創建一個測試項目以測試使用Tab和通過使用水平輕掃手勢更改標籤。使用水平滑動切換標籤
除了一個問題,代碼幾乎可以工作。當我滑動內容以更改選項卡時,會顯示第二個選項卡的活動,但實際選項卡未選中。即在Android 4.2上,當應用程序加載時,它啓動主FragmentActivity,然後顯示第一個片段(片段1),它位於選項卡1的內部。選項卡1然後在下面有一條藍線,以顯示該選項卡被選中。
如果我再輕掃屏幕,第二活性顯示,但藍線保持標籤下的1和跨不會移動到標籤2.
但是,如果我選擇實際的標籤,而不是刷卡的再如預期的那樣,藍線會移動到第二個選項卡上。
我懷疑我錯過了一些非常簡單的東西,從我正在看的教程,但我無法找到我的生活可能是什麼。
下面是我爲FragmentActivity的代碼。這是應用第一次啓動時加載的內容。
public class TabsViewPagerFragmentActivity extends FragmentActivity
implements OnTabChangeListener, OnPageChangeListener{
private TabHost mTabHost;
private ViewPager mViewPager;
private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, TabInfo>();
private PagerAdapter mPagerAdapter;
private class TabInfo
{
private String tag;
private Class<?> clss;
private Bundle bundle;
private Fragment fragment;
public TabInfo(String tag, Class<?> clss, Bundle bundle) {
this.tag = tag;
this.clss = clss;
this.bundle = bundle;
}
}
class TabFactory implements TabContentFactory
{
private final Context mContext;
public TabFactory (Context context)
{
mContext = context;
}
public View createTabContent(String tag)
{
View view = new View(mContext);
view.setMinimumWidth(0);
view.setMinimumHeight(0);
return view;
}
}
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.initialiseTabHost(savedInstanceState);
if (savedInstanceState != null)
{
mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}
this.initialiseViewPager();
}
protected void onSaveInstancestate(Bundle outState)
{
outState.putString("tab", mTabHost.getCurrentTabTag());
super.onSaveInstanceState(outState);
}
private void initialiseViewPager()
{
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
this.mViewPager.setAdapter(this.mPagerAdapter);
this.mViewPager.setOnPageChangeListener(this);
}
private void initialiseTabHost(Bundle bundle)
{
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
TabInfo tabInfo = null;
TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost,
this.mTabHost.newTabSpec("Tab 1").setIndicator("Tab 1"),
tabInfo = new TabInfo("Tab1", Tab1Fragment.class, bundle));
TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost,
this.mTabHost.newTabSpec("Tab 2").setIndicator("Tab 2"),
tabInfo = new TabInfo("Tab2", Tab2Fragment.class, bundle));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
mTabHost.setOnTabChangedListener(this);
}
private static void AddTab(TabsViewPagerFragmentActivity activity, TabHost tabHost,
TabHost.TabSpec tabSpec, TabInfo tabInfo)
{
tabSpec.setContent(activity.new TabFactory(activity));
tabHost.addTab(tabSpec);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
this.mViewPager.setCurrentItem(position);
}
@Override
public void onTabChanged(String tag) {
int pos = this.mTabHost.getCurrentTab();
this.mViewPager.setCurrentItem(pos);
}
}
下面是對PageAdapter代碼
public class PagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PagerAdapter(FragmentManager fm, List<Fragment> fragments)
{
super(fm);
this.fragments = fragments;
}
public int getCount()
{
return this.fragments.size();
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
}
感謝您的幫助,您可以提供。
感謝您的幫助,現在完美工作 – Boardy