Android ActionBarSherlock Fragment选项卡

时间:2013-02-05 08:43:31

标签: android tabs android-fragments actionbarsherlock

我正在尝试一些ActionBarSherlock Fragment选项卡。我目前在我的代码中遇到了一些问题。我在我的片段中使用了单独的Tablisteners。如果可能,请更正我的代码。

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转换为Fragment

Dixit Patel的建议

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

    }

}

2 个答案:

答案 0 :(得分:0)

你得到的错误是为你说的:

  • 类型不匹配:无法从FragmentsTab1转换为Fragment

FragmentsTab1不是Fragment - 它是SherlockFragmentActivity,即Activity

您需要重新编写代码,以便了解FragmentActivity之间的区别。


进一步解释。

您的代码说:

 mFragment = new FragmentsTab1();

但你已宣布:

 public class FragmentsTab1 extends SherlockFragmentActivity implements

ActionBar.TabListener

private Fragment mFragment;

我不知道你要做什么,但我可以告诉你这是一个相对简单的java错误,这就是为什么我建议你试着理解Fragment和{{1}之间的区别}。

我可以看到你是这门语言的新手,所以我建议你阅读一下java继承和子类是如何工作的 - 你会在网上找到大量资源来学习java。

如果他们没有相互继承,您将看到不能将一种类型“强制转换”为另一种类型。 “铸造”是错误的意思。它就像是说Activity是与Car相似的对象类型 - 但它们实际上并不相关。


那就是说,我确实建议您使用ActionBarSherlock sdk中的示例代码,因为它会为您提供所需的内容。您会发现将它作为自己应用的起点非常有用。

答案 1 :(得分:0)

错误“类型不匹配:无法从FragmentsTab1转换为Fragment”是因为SherlockFragmentActivity是一个Activity而不是Fragment。如果你想创建一个Fragment,你必须从SherlockFragment扩展。

另一方面,Richard Le Mesurier是对的,您必须了解Fragment和Activity之间的区别。