簡體   English   中英

Android ActionBarSherlock片段選項卡

[英]Android ActionBarSherlock Fragment Tabs

我正在嘗試一些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

    }

}

您收到的錯誤說明了這一點:

  • 類型不匹配:無法從FragmentsTab1轉換為Fragment

FragmentsTab1不是一個Fragment ,而是一個SherlockFragmentActivity即一個Activity

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


進一步解釋。

您的代碼說:

 mFragment = new FragmentsTab1();

但是您已經聲明:

 public class FragmentsTab1 extends SherlockFragmentActivity implements

ActionBar.TabListener

private Fragment mFragment;

我無法告訴您您要做什么,但是我可以告訴您這是一個相對簡單的Java錯誤,這就是為什么我建議您嘗試了解FragmentActivity之間的區別的原因。

我可以看到您是該語言的新手,因此建議您閱讀有關Java繼承和子類如何工作的信息-您將在Web上找到大量學習Java的資源。

您將看到,如果它們彼此之間沒有繼承關系,則無法將其“轉換”為另一種類型。 錯誤在於“鑄造”。 就像說Car是與SoccerPlayer類似的對象SoccerPlayer ,但是實際上並沒有關聯。


就是說,我確實建議您在ActionBarSherlock sdk中使用示例代碼,因為它將為您提供所需的內容。 您會發現將其用作自己的應用程序的起點非常有用。

錯誤“類型不匹配:無法從FragmentsTab1轉換為Fragment”是因為SherlockFragmentActivity是一個Activity,而不是一個Fragment。 如果要創建片段,則必須從SherlockFragment擴展。

另一方面,Richard Le Mesurier是正確的,您必須了解Fragment和Activity之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM