【问题标题】:Android ActionBarSherlock Fragment TabsAndroid ActionBarSherlock 片段标签
【发布时间】:2013-02-05 08:43:31
【问题描述】:

我正在尝试一些 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

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

    }

}

【问题讨论】:

标签: android tabs android-fragments actionbarsherlock


【解决方案1】:

你得到的错误告诉你:

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

FragmentsTab1 不是 Fragment - 它是 SherlockFragmentActivity,即 Activity

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


进一步解释。

你的代码说:

 mFragment = new FragmentsTab1();

但你已经声明:

 public class FragmentsTab1 extends SherlockFragmentActivity implements

ActionBar.TabListener

private Fragment mFragment;

我不知道你在做什么,但我可以告诉你,这是一个比较简单的java错误,所以我建议你试着理解FragmentActivity之间的区别。

我可以看出您是这门语言的新手,所以我建议您阅读有关 java 继承和子类的工作原理 - 您会在网络上找到大量学习 java 的资源。

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


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

【讨论】:

  • 我重做了很多次。但我仍然无法得到它。你能分享一点知识吗?
  • 我之前没有使用过Tab Fragments,所以不能提供我的个人代码。 ABS SDK 中提供了很棒的演示应用程序,每当遇到 ABS 问题时我都会使用它们。所以从他的工作 ABS Tab Fragment 代码开始,用它代替你的代码。
  • 关于我的代码。您是说我需要将 FragmentsTab1 转换为 Fragment?我应该只使用 SherlockFragment 而不是 SherlockFragmentActivity 吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多