好吧,所以我試圖使用Sherlock顯示多個選項卡,每個片段。 我只有4個類:一個用於我的主要活動,兩個用於我的片段,另一個用於TabListener。 一切都應該沒問題(我有相同的程序沒有Sherlcock,在4.0設備上工作),所以我不明白爲什麼我得到那個NullPointerException。不能設法使用標籤與Sherlock
下面是錯誤的一部分
05-18 17:46:57.197: E/AndroidRuntime(9312): FATAL EXCEPTION: main
05-18 17:46:57.197: E/AndroidRuntime(9312): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.micky.testing/com.micky.testing.SherlockTestActivity}: java.lang.NullPointerException
...
05-18 17:46:57.197: E/AndroidRuntime(9312): Caused by: java.lang.NullPointerException
05-18 17:46:57.197: E/AndroidRuntime(9312): at com.micky.testing.MyTabListener.onTabSelected(MyTabListener.java:21)
...
05-18 17:46:57.197: E/AndroidRuntime(9312): at com.micky.testing.SherlockTestActivity.onCreate(SherlockTestActivity.java:39)
這裏是我的片段之一:
HomeFragment
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.actionbarsherlock.app.SherlockFragment;
public class HomeFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.homefragment, container, false);
}
}
這裏是我的tabListener:
MyTabListener
public class MyTabListener implements TabListener {
public SherlockFragment fragment;
MyTabListener(SherlockFragment fr) {
Log.d("MYTAG", "Creating a fragmentListener w/ " + fr);
this.fragment = fr;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
Log.d("TAG", "" + fragment);
ft.replace(R.id.fragment_container, fragment);
}
}
而我的主要活動:
SherlockTestActivity
public class SherlockTestActivity extends SherlockActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//We take the support actionbar
ActionBar ab = getSupportActionBar();
//We set to navigationmode with tabs
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//we create the tabs
ActionBar.Tab homeTab = ab.newTab().setText("Home");
ActionBar.Tab tagsTab = ab.newTab().setText("Tags");
//We create the fragments
SherlockFragment homeFragment = new HomeFragment();
SherlockFragment tagsFragment = new TagFragments();
//And we set the tabsListener;
homeTab.setTabListener(new MyTabListener(homeFragment));
tagsTab.setTabListener(new MyTabListener(tagsFragment));
Log.d("","" + homeTab);
ab.addTab(homeTab);
ab.addTab(tagsTab);
}
好了,錯誤似乎被拋出當我添加的標籤到我的動作條。當我不添加TabListener到標籤時,沒有錯誤。 代碼ft.replace(R.id.fragment_container, fragment);
(MyTabListener)似乎是問題所在,但我無法理解爲什麼。片段不爲空(在實例化新的tabListener時初始化),並且沒有理由使fragment_container錯誤。
所以如果任何人都可以設法幫助我在這裏!謝謝 !
實際上在使用ABS時不需要你的第二點。它應該總是給你一個適當的支持庫事務來使用。如果沒有,請提交錯誤! –
我在我的應用程序中使用ABS,並不得不使用此作爲解決方法。我會盡量在本週末的某個時候再次進行測試,而不使用解決方法並向您報告。我很確定我正在使用4.0.2 – dymmeh
好吧,就是這樣。我沒有擴展SherlockFragmentActivity,我應該看到它!對於第二個bug,它似乎與我的問題沒有關係(一旦我擴展了SherlockFragmentActivity,就沒有錯誤)。謝謝 ! – MagicMicky