2013-03-03 45 views
-1

编辑:找到解决方案!对于任何想要做同样事情的人,我在下面找到了一个更好的教程: http://comfreek.blogspot.com/2012/06/actionbars-and-tabs-under-android-2x.html 这是非常基本的,并显示如何使用ABS设置带有碎片的选项卡以防其他人感兴趣!转换为ActionBarSherlock

我在这里以下的教程来实现标签和片段:http://www.lucazanini.eu/2012/android/tab-layout-in-android-with-actionbar-and-fragment/?lang=en

我有一些麻烦,将其转换为与旧版本的Android的使用;我的目标是最低级别的姜饼,所以我必须使用ActionBarSherlock。即使我尝试复制它所说的TabActionBarActivity.java类,我也会收到错误。 (我也不确定如何处理片段的其他两个类,但我会稍后处理这些类)。

import android.app.FragmentTransaction; 
import android.os.Bundle; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 



public class TabActionBarActivity extends SherlockActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActionBar actionBar = getSupportActionBar(); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    String label1 = getResources().getString(R.string.label1); 
    Tab tab = actionBar.newTab(); 
    tab.setText(label1); 
    TabListener<Tab1Fragment> t1 = new TabListener<Tab1Fragment>(this, label1, Tab1Fragment.class); 
    tab.setTabListener(t1); 
    actionBar.addTab(tab); 

    String label2 = getResources().getString(R.string.label2); 
    Tab tab = actionBar.newTab(); 
    tab.setText(label2); 
    TabListener<Tab1Fragment> t2 = new TabListener<Tab1Fragment>(this, label2, Tab2Fragment.class); 
    tab.setTabListener(t2); 
    actionBar.addTab(tab); 
} 

private class TabListener<T extends SherlockFragment> 
    implements com.actionbarsherlock.app.ActionBar.TabListener{ 

    private SherlockFragment mFragment; 
    private final SherlockActivity mActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    public TabListener(SherlockActivity activity, String tag, Class<T> clz) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // Check if the fragment is already initialized 
     if (mFragment == null) { 
     // If not, instantiate and add it to the activity 
      mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
      ft.add(android.R.id.content, mFragment, mTag); 
     } else { 
     // If it exists, simply attach it in order to show it 
      ft.attach(mFragment); 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      // Detach the fragment, because another one is being attached 
      ft.detach(mFragment); 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // User selected the already selected tab. Usually do nothing. 
    } 
} 
} 

我有看起来像两条线的错误:

TabListener<Tab1Fragment> t1 = new TabListener<Tab1Fragment>(this, label1, Tab1Fragment.class); 

指出 “TabListener T1 =新TabListener(此,label1的,Tab1Fragment.class);”我认为当代码的后面的部分被修复时,这将被清除。

与选择/取消选择选项卡有关的方法有错误,我不确定如何解决这些问题。任何指针或建议?

+0

请发表您收到 – ianhanniballake 2013-03-03 06:14:46

回答

1

只需确保您要导入

import android.support.v4.app.FragmentTransaction; 

代替

import android.app.FragmentTransaction; 


如果你的执行经理片段一定要这样调用它

FragmentManager fm = this.getSupportFragmentManager(); 

代替

getFragmentManager(); 

,并使用此导入的

import android.support.v4.app.FragmentManager; 

代替

import android.app.FragmentManager; 
+0

由于错误消息(S),即清除一些问题了。我仍然有一个错误:mFragment = Fragment.instantiate(mActivity,mClass.getName());它说“片段无法解决”。如果我尝试从android.support.v4.app导入片段,则会出现类型不匹配。有任何想法吗? – Chimi 2013-03-03 20:59:19