2013-02-05 87 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是对的,你必须理解片段和活动之间的区别。