3

わかりましたので、Sherlock を使用して、それぞれ 1 つのフラグメントに対して複数のタブを表示しようとしています。クラスは 4 つしかありません。1 つはメイン アクティビティ用、2 つはフラグメント用、もう 1 つは TabListener 用です。すべて問題ないはずです (4.0 デバイスで動作する Sherlcock を使用しないまったく同じプログラムがあります) ため、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)

これが私のフラグメントの1つです:
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);
}

OK、タブをアクションバーに追加するとエラーがスローされるようです。タブに TabListener を追加しない場合、エラーは発生しません。コードft.replace(R.id.fragment_container, fragment);(MyTabListener) が問題のようですが、その理由を理解できません。fragment は null ではなく (新しい tabListener をインスタンス化するときに初期化されます)、fragment_container が間違っている理由はありません。

だから誰かが私を助けてくれるなら! ありがとうございました !

4

1 に答える 1

8

SherlockActivity の代わりに SherlockFragmentActivity を拡張する必要があります。フラグメントを管理する場合は、フラグメント アクティビティを使用します。

于 2012-05-18T16:17:31.463 に答える