0

タブ付きのSherlockFragmentActivityを使用しています。最初は正常にロードされますが、向きが変更されると、次のエラーが発生します。

java.lang.RuntimeException: Unable to start activity  
ComponentInfo{ext.domain.app/ext.domain.app.MainActivity}:
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate 
fragment ext.domain.app.MainActivity$1: make sure class name exists, is public, 
and has an empty constructor that is public

私は同様の問題に関する投稿を見てきましたが、違いがあります。このエラーでは、使用されているFragmentクラスではなく、MainActivityがフラグメント(「フラグメントext.domain.MainActivityをインスタンス化できません」)として表示されているようです。言及された。

MainActivityに空のコンストラクターを与えることは役に立ちません。私が実際に使用しているフラグメントはArticleListFragmentと呼ばれ、コンストラクターが空のパブリッククラスです。

私はAndroid2.3でアプリを実行していますが、以下のコードがあります(ほとんどの無関係な詳細が削除され、それでも例外がスローされます)。

MainActivity.java:

(編集:匿名の内部型であるArticleListFragmentのインスタンス化を追加しました。削除すると機能するようです。)

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {

    ActionBar actionBar;

    public MainActivity() {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        // Create ActionBar
        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Create Tabs
        String[] tabs = { 
                getString(R.string.tab1), 
                getString(R.string.tab2), 
                getString(R.string.tab3),
                getString(R.string.tab4)
        };

        for(String tabname : tabs) {
            ActionBar.Tab tab = actionBar.newTab();
            tab.setText(tabname);
            tab.setTabListener(this);
            actionBar.addTab(tab);
        }
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        switch(tab.getPosition()) {
        case 0:
            ArticleListFragment home = new ArticleListFragment() { 
                            public void onAttach(Activity activity) {
                                // This is some code to populate the Fragment with an HTTPRequest
                                super.onAttach(activity);
                                RequestParams paramsHome = RequestClient.getBasicRequestParams(activity);
                                populate("frontpage", paramsHome);
                            };
                        };
            ft.replace(R.id.contentframe, home);
            break;
        case 3:
            ArticleListFragment saved = new ArticleListFragment() { 
                            public void onAttach(Activity activity) {
                                // This is some code to populate the Fragment with an HTTPRequest
                                super.onAttach(activity);
                                RequestParams paramsSaved = RequestClient.getBasicRequestParams(activity);
                                populate("saved", paramsSaved);
                            };
                        };
            ft.replace(R.id.contentframe, saved);
            break;
        }
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }

}

ArticleListFragment.java:

public class ArticleListFragment extends SherlockFragment {
    public ArticleListFragment() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.fragment_articlelist, null);
        return layout;
    }
}

このコードが間違っている理由はありますか?

4

1 に答える 1

1

完全なコードはMainActivity何ですか? をインスタンス化しようとしているのではなくMainActivity、 の匿名の内部クラス ( で示される$1) ですMainActivity

于 2013-02-23T14:38:27.463 に答える