2013-02-05 68 views
1

我正在嘗試一些ActionBarSherlock片段標籤。我目前在我的代碼中遇到了一些問題。我在我的片段中使用單獨的Tablisteners。如有可能,請糾正我的代碼。Android ActionBarSherlock片段標籤

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 




public class FragmentsTab1 extends SherlockFragmentActivity implements 
ActionBar.TabListener{ 
    private Fragment mFragment; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment1); 

    } 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     mFragment = new FragmentsTab1(); //Type mismatch: cannot convert from FragmentsTab1 to Fragment 
     ft.add(android.R.id.content, mFragment); 
     ft.attach(mFragment); 
    } 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     ft.remove(mFragment); 
    } 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

} 

錯誤代碼:類型不匹配:不能從FragmentsTab1轉換到碎片

建議通過迪克西特帕特爾

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

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 




public class FragmentsTab1 extends SherlockFragmentActivity implements 
ActionBar.TabListener{ 
    private Fragment mFragment; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment1); 

    } 
    /** 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     mFragment = new FragmentsTab1(); 
     ft.add(android.R.id.content, mFragment); 
     ft.attach(mFragment); 
    } 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     ft.remove(mFragment); 
    } 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    **/ 
    public void onTabSelected(Tab tab, 
      android.support.v4.app.FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     mFragment = new FragmentsTab1(); //Type mismatch: cannot convert from FragmentsTab1 to Fragment 
     ft.add(android.R.id.content, mFragment); //The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment) 
     ft.attach(mFragment); //The method attach(Fragment) in the type FragmentTransaction is not applicable for the arguments (Fragment) 
    } 
    public void onTabUnselected(Tab tab, 
      android.support.v4.app.FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     ft.remove(mFragment); //The method remove(Fragment) in the type FragmentTransaction is not applicable for the arguments (Fragment) 
    } 
    public void onTabReselected(Tab tab, 
      android.support.v4.app.FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

} 
+0

參考這個http://www.mentby.com/Group/android-developers/fragment-problems-converting-an-app.html –

回答

0

你得到的錯誤說,它給你:

  • 類型不匹配:無法從FragmentsTab1轉換爲片段

FragmentsTab1不是Fragment - 它是SherlockFragmentActivity,即Activity

您需要重新編寫代碼,以便您瞭解FragmentActivity之間的區別。


爲了進一步解釋。

您的代碼表示:

mFragment = new FragmentsTab1(); 

但是你聲明:

​​

ActionBar.TabListener

private Fragment mFragment; 

我不能告訴你正在嘗試d o,但我可以告訴你,這是一個相對簡單的java錯誤,這就是爲什麼我建議你試着瞭解FragmentActivity之間的區別。

我可以看到你對這門語言很陌生,所以我建議你閱讀一下關於java繼承和子類是如何工作的 - 你會在網上找到大量用於學習java的資源。

你會看到,如果不是彼此繼承,你就不能「投」一種類型到另一種類型。 「鑄造」就是錯誤所在。它就像是說Car是與SoccerPlayer類似的對象 - 但它們實際上沒有關係。


這麼說,我真的建議你使用示例代碼中ActionBarSherlock SDK,因爲它會提供你所需要的。你會發現它非常有用作爲你自己的應用程序的起點。

+0

我重做了很多次。但我仍然無法得到它。你能分享一些知識嗎? –

+0

我之前沒有使用Tab Fragments,所以不能給我的個人代碼。 ABS SDK中提供了很多演示應用程序,每當我遇到ABS問題時,我都會使用它們。所以,從他的ABS Tab Fragment代碼開始,使用它代替你的代碼。 –

+0

關於我的代碼。你是說我需要將我的FragmentsTab1轉換爲Fragment?我應該只使用SherlockFragment而不是SherlockFragmentActivity? –

0

錯誤「類型不匹配:無法從FragmentsTab1轉換爲Fragment」是因爲SherlockFragmentActivity是一個活動而不是片段。如果你想創建一個片段,你必須從SherlockFragment擴展。

另一方面,Richard Le Mesurier是對的,你必須理解片段和活動之間的區別。