[英]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
,而是一個SherlockFragmentActivity
即一個Activity
。
您需要重新編寫代碼,以便了解Fragment
和Activity
之間的區別。
進一步解釋。
您的代碼說:
mFragment = new FragmentsTab1();
但是您已經聲明:
public class FragmentsTab1 extends SherlockFragmentActivity implements
ActionBar.TabListener
和
private Fragment mFragment;
我無法告訴您您要做什么,但是我可以告訴您這是一個相對簡單的Java錯誤,這就是為什么我建議您嘗試了解Fragment
和Activity
之間的區別的原因。
我可以看到您是該語言的新手,因此建議您閱讀有關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.