1

我正在尝试一些 ActionBarSherlock 片段标签。我目前在我的代码中遇到了一些问题。我在片段中使用了单独的 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

迪克西特·帕特尔的建议

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

    }

}
4

2 回答 2

0

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

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

于 2013-12-18T08:41:10.637 回答
0

你得到的错误告诉你:

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

FragmentsTab1 不是Fragment- 它是一个SherlockFragmentActivityie an Activity

您需要重新编写代码,以便了解 aFragment和 an之间的区别Activity


进一步解释。

你的代码说:

 mFragment = new FragmentsTab1();

但是您已经声明:

 public class FragmentsTab1 extends SherlockFragmentActivity implements

ActionBar.TabListener

private Fragment mFragment;

我无法告诉您您要做什么,但我可以告诉您这是一个相对简单的 java 错误,这就是为什么我建议您尝试了解和之间的Fragment区别Activity

我可以看到您是该语言的新手,因此我建议您阅读有关 java 继承和子类如何工作的内容 - 您会在网上找到大量学习 java 的资源。

您将看到,如果它们不相互继承,则不能将一种类型“强制转换”为另一种类型。“铸造”是错误所在。就像说 aCar是与 a 相似类型的对象SoccerPlayer- 但它们实际上并不相关。


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

于 2013-02-05T09:03:53.420 回答