0

アプリが Gingerbread と互換性を持つように、Android 4.x コードを ActionBarSherlock を使用するように変換しています。

ここまでは順調ですが、フラグメントの新しいインスタンスの起動に失敗します。

私の MainActivity はSherlockFragmentActivityimplementsを拡張しますActionBar.TabListener

case が 0 の場合、コードは次のように失敗します。

@Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            mFragmentProjects = ProjectsFragment.newInstance(position);
            return mFragmentProjects;                                                      
        case 1:
            mFragmentContacts = FragmentPeople.newInstance(position, 0);
            return mFragmentContacts;               
        }
        return ArrayListFragment.newInstance(position);
    }

case が 0 の場合、フラグメントを初期化するはずですが、次の例外が発生します: ClassNotFoundException. 私が持っている他の唯一の手がかりは次のとおりです。「これ」PathClassLoaderと「名前」には次のように書かれていますandroid.app.ActionBar$TabListener

これは TabListener またはライブラリが含まれていない/正しくロードされていないことに関係していると思いますか? 私はすでにプロジェクトをきれいにしました

フラグメント ProjectsFragment extends SherlockListFragment.

newInstance は非常に簡単です。

static ProjectsFragment newInstance(int num) {
    ProjectsFragment f = new ProjectsFragment();

    // Supply num input as an argument.
    Bundle args = new Bundle();
    args.putInt("num", num);
    f.setArguments(args);

    return f;
}
4

1 に答える 1

0

MainActivity には ActivityY への参照はありませんが、ActivityY に SherlockFragment コードが含まれていないという事実だけで失敗したことがわかります。これを別の方法で説明すると、次のようになります。

MainActivity はリストである ProjectsFragment を使用します ProjectsFragment のリストをクリックすると、ListsActivity ListsActivity が ItemsFragment を参照します

MainActivity が機能する前に、ItemsFragment を Sherlock コードに変更する必要がありました。ページャー、タブ、フラグメントを操作している場合、Java は何らかの方法で「先を読む」ようです。

于 2012-10-17T19:25:37.210 に答える