Android Can';我无法将标签与夏洛克一起使用

Android Can';我无法将标签与夏洛克一起使用,android,tabs,android-fragments,actionbarsherlock,Android,Tabs,Android Fragments,Actionbarsherlock,好的,所以我尝试使用Sherlock来显示多个选项卡,每个选项卡对应一个片段。 我只有4节课:一节是我的主要活动,两节是我的片段,一节是TabListener。 一切都应该是正常的(我有一个没有Sherlock的完全相同的程序,在4.0设备上工作),所以我不明白为什么会出现NullPointerException 这是部分错误 05-18 17:46:57.197: E/AndroidRuntime(9312): FATAL EXCEPTION: main 05-18 17:46:57.197:

好的,所以我尝试使用Sherlock来显示多个选项卡,每个选项卡对应一个片段。 我只有4节课:一节是我的主要活动,两节是我的片段,一节是TabListener。 一切都应该是正常的(我有一个没有Sherlock的完全相同的程序,在4.0设备上工作),所以我不明白为什么会出现NullPointerException

这是部分错误

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:
MyTableListener

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);
}
好的,当我将标签添加到actionbar时,似乎会抛出错误。当我没有将TablListener添加到选项卡时,没有错误。 代码
ft.replace(R.id.fragment\u容器,fragment)(MyTabListener)似乎是个问题,但我无法理解原因。fragment不是null(在实例化新的tabListener时初始化),并且fragment\u容器没有任何错误的原因


所以如果有人能帮我的话!谢谢大家!

您应该扩展SherlockFragmentActivity而不是SherlockActivity。在管理片段时使用片段活动。

在使用ABS时,实际上不需要第二点。它应该始终为您提供适当的支持库事务以供使用。如果没有,请提交一个bug!我在我的应用程序中使用ABS,并且不得不将其作为一种解决方法。我会尝试在这个周末的某个时候再次测试这个问题,没有解决方法,并向您报告。我很确定我用的是4.0.2Alright,就是这样。我没有扩展SherlockFragmentActivity,我应该看到它!对于第二个bug,它似乎与我的问题无关(扩展SherlockFragmentActivity后没有错误)。谢谢我现在将删除我答案的第二部分,因为它可能是也可能不是一个真正的bug(我知道它是在过去)。如果这看起来仍然是腹肌的问题,我会尽力帮助@JakeWharton解决。否则,我只是在做我这方面的错事。