2013-03-03 48 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