0

誰かが説明せずにいくつかのコードを含める時が来ます。ま、今回はコードが全然難しくないのでこの場合です。スライドドロワーでフラグメントを切り替えようとしています。コード:

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

DrawerItemClickListener クラスは次のとおりです。

private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        selectItem(position);
    }
}

private void selectItem(int position) {
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    Fragment frag = null;
    switch (position) {
    case 0:
        ft.replace(R.id.content_frame, Algeria);
        break;
    case 1:
        ft.replace(R.id.content_frame, Bahrain);

        break;
    case 2:
        ft.replace(R.id.content_frame, Comoros);
        break;
    case 3:
        ft.replace(R.id.content_frame, Djibouti);
        break;
    case 4:
        ft.replace(R.id.content_frame, Egypt);
        break;
    case 5:
        ft.replace(R.id.content_frame, Iraq);
        break;
    case 6:
        ft.replace(R.id.content_frame, Jordan);
        break;
    case 7:
        ft.replace(R.id.content_frame, Kuwait);
        break;
    case 8:
        ft.replace(R.id.content_frame, Lebanon);
        break;
    case 9:
        ft.replace(R.id.content_frame, Libya);
        break;
    case 10:
        ft.replace(R.id.content_frame, Mauritania);
        break;
    case 11:
        ft.replace(R.id.content_frame, Morocco);
        break;
    case 12:
        ft.replace(R.id.content_frame, Oman);
        break;
    case 13:
        ft.replace(R.id.content_frame, Pelastine);
        break;
    case 14:
        ft.replace(R.id.content_frame, Qatar);
        break;
    case 15:
        ft.replace(R.id.content_frame, Saudi_Arabia);
        break;
    case 16:
        ft.replace(R.id.content_frame, Somalia);
        break;
    case 17:
        ft.replace(R.id.content_frame, Sudan);
        break;
    case 18:
        ft.replace(R.id.content_frame, Syria);
        break;
    case 19:
        ft.replace(R.id.content_frame, Tunisia);
        break;
    case 20:
        ft.replace(R.id.content_frame, Emirates);
        break;
    case 21:
        ft.replace(R.id.content_frame, Yemen);
        break;
    }
    ft.commit();

}

しかし、それは機能 しません バグはまったくありません。画面に何も表示されません。フラグメントが 100% 動作することはわかっていますが、画面には表示されません。ではなぜ!? ありがとう。:)

フルコードの更新:

public class Drawer extends SherlockFragmentActivity {
    MenuListAdapter mMenuAdapter;
    String[] title;
    String[] subtitle;
    int[] icon;
    SharedPreferences prefs;
    public static String prefName = "SecretFile";
    Fragment Algeria = new Fragment1();
    Fragment Bahrain = new Fragment2();
    Fragment Comoros = new Fragment3();
    Fragment Djibouti = new Fragment4();
    Fragment Egypt = new Fragment5();
    Fragment Iraq = new Fragment6();
    Fragment Jordan = new Jordan();
    Fragment Kuwait = new Fragment8();
    Fragment Lebanon = new Lebanon();
    Fragment Libya = new Fragment10();
    Fragment Mauritania = new Fragment11();
    Fragment Morocco = new Fragment12();
    Fragment Oman = new Fragment13();
    Fragment Pelastine = new Fragment14();
    Fragment Qatar = new Qatar();
    Fragment Saudi_Arabia = new Fragment16();
    Fragment Somalia = new Fragment17();
    Fragment Sudan = new Fragment18();
    Fragment Syria = new Fragment19();
    Fragment Tunisia = new Fragment20();
    Fragment Emirates = new Fragment21();
    Fragment Yemen = new Fragment22();
    ConnectivityManager connMgr;
    NetworkInfo networkInfo;
    ListView mDrawerList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SlidingMenu sm = new SlidingMenu(this);
        title = getResources().getStringArray(R.array.country_array);
        icon = new int[] { R.drawable.algeria, R.drawable.bahrain,
                R.drawable.comoros, R.drawable.djibouti, R.drawable.egypt,
                R.drawable.iraq, R.drawable.jordan, R.drawable.kuwait,
                R.drawable.lebanon, R.drawable.libya, R.drawable.mauritania,
                R.drawable.morocco, R.drawable.oman, R.drawable.pelastine,
                R.drawable.qatar, R.drawable.saudiarabia, R.drawable.somalia,
                R.drawable.sudan, R.drawable.syria, R.drawable.tunisia,
                R.drawable.emirates, R.drawable.yemen, };
        sm.setMenu(R.layout.drawer_main);
        sm.setShadowWidthRes(R.dimen.shadow_width);
        sm.setShadowDrawable(R.drawable.shadow);
        sm.setMode(SlidingMenu.LEFT_RIGHT);
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        sm.setFadeDegree(0.7f);
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        sm.setSecondaryMenu(R.layout.menu_frame);
        sm.setSecondaryShadowDrawable(R.drawable.shadow);
        sm.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
        mMenuAdapter = new MenuListAdapter(this, title, icon);
        mDrawerList.setAdapter(mMenuAdapter);
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    }

    private int seethefirstactivity() {
        // TODO Auto-generated method stub
        int fragmento;
        connMgr = (ConnectivityManager) this
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        networkInfo = connMgr.getActiveNetworkInfo();
        fragmento = prefs.getInt("country", 1);
        if (fragmento == 0) {
            Algeria = new Fragment1();

        } else if (fragmento == 1) {
            Bahrain = new Fragment2();

        } else if (fragmento == 2) {
            Comoros = new Fragment3();

        } else if (fragmento == 3) {
            Djibouti = new Fragment4();

        } else if (fragmento == 4) {
            Egypt = new Fragment5();

        } else if (fragmento == 5) {
            Iraq = new Fragment6();

        } else if (fragmento == 6) {
            Jordan = new Jordan();

        } else if (fragmento == 7) {
            Kuwait = new Fragment8();

        } else if (fragmento == 8) {

            Lebanon = new Lebanon();

        } else if (fragmento == 9) {
            Libya = new Fragment10();

        } else if (fragmento == 10) {
            Mauritania = new Fragment11();

        } else if (fragmento == 11) {
            Morocco = new Fragment12();

        } else if (fragmento == 12) {
            Oman = new Fragment13();

        } else if (fragmento == 13) {
            Pelastine = new Fragment14();

        } else if (fragmento == 14) {
            Qatar = new Qatar();

        } else if (fragmento == 15) {
            Saudi_Arabia = new Fragment16();

        } else if (fragmento == 16) {
            Somalia = new Fragment17();

        } else if (fragmento == 17) {
            Sudan = new Fragment18();

        } else if (fragmento == 18) {
            Syria = new Fragment19();

        } else if (fragmento == 19) {
            Tunisia = new Fragment20();

        } else if (fragmento == 20) {
            Emirates = new Fragment21();

        } else if (fragmento == 21) {
            Yemen = new Fragment22();

        }
        return fragmento;
    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();
        Fragment frag = null;
        switch (position) {
        case 0:
            ft.replace(R.id.content_frame, Algeria);
            break;
        case 1:
            ft.replace(R.id.content_frame, Bahrain);

            break;
        case 2:
            ft.replace(R.id.content_frame, Comoros);
            break;
        case 3:
            ft.replace(R.id.content_frame, Djibouti);
            break;
        case 4:
            ft.replace(R.id.content_frame, Egypt);
            break;
        case 5:
            ft.replace(R.id.content_frame, Iraq);
            break;
        case 6:
            ft.replace(R.id.content_frame, Jordan);
            break;
        case 7:
            ft.replace(R.id.content_frame, Kuwait);
            break;
        case 8:
            ft.replace(R.id.content_frame, Lebanon);
            break;
        case 9:
            ft.replace(R.id.content_frame, Libya);
            break;
        case 10:
            ft.replace(R.id.content_frame, Mauritania);
            break;
        case 11:
            ft.replace(R.id.content_frame, Morocco);
            break;
        case 12:
            ft.replace(R.id.content_frame, Oman);
            break;
        case 13:
            ft.replace(R.id.content_frame, Pelastine);
            break;
        case 14:
            ft.replace(R.id.content_frame, Qatar);
            break;
        case 15:
            ft.replace(R.id.content_frame, Saudi_Arabia);
            break;
        case 16:
            ft.replace(R.id.content_frame, Somalia);
            break;
        case 17:
            ft.replace(R.id.content_frame, Sudan);
            break;
        case 18:
            ft.replace(R.id.content_frame, Syria);
            break;
        case 19:
            ft.replace(R.id.content_frame, Tunisia);
            break;
        case 20:
            ft.replace(R.id.content_frame, Emirates);
            break;
        case 21:
            ft.replace(R.id.content_frame, Yemen);
            break;
        }
        ft.commit();

    }

}
4

2 に答える 2

0

わかりましたので、MyApplication クラスをあまり使用していないと思います。問題ありません。お見せします。

MyApplication クラスは、アプリでいつでもメソッドを使用してデータを保存/復元するために使用される、「一般的な」アクセス可能なクラスであると言えます。

それでは始めましょう:

あなたのマニフェストで:

<application

        android:name=".MyApplication"

        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="myPackageName"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

コードに " android:name=".MyApplication" " がある場合は、プロジェクトで作成する MyApplication クラス名です。

ここで、単純なクラスを作成し、「 Application 」に拡張します。

package youPackageName;

public class MyApplication extends Application {


/**
*  IN HERE WILL BE ALL YOUR VARIABLES AND METHODS
*/
}

どのようにそれを使用するのですか?簡単...

単純な文字列を保存したいと言いますか?その文字列を取得および設定するメソッド

    package youPackageName;

    public class MyApplication extends Application {

    String mString = "";

// To set my string 
public void setMyString(String s){
this.mString = s;
}
// get string 
public String getMyString(){
return this.mString;
}

// one you seted ones that string it will be abailable at any moment while your app is not destroyed

    }

あなたのアクティビティから、そのアプリクラスでそのメソッドをどのように呼び出しますか?

MyApplication MyApp;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MyApp = ((MyApplication)getApplicationContext());


//SET
MyApp.setMyString("HELLO");

//GET
String a = MyApp.getMyString();

}

今 !フラグメント!

私のレイアウトはとてもシンプルです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<FrameLayout
        android:id="@+id/main_frag"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

MainActivity で:

                           // myNewFragment: FRAG TO BE REPLACE
public void changeFragment(Fragment myNewFragment) {
        FragmentTransaction t = getSupportFragmentManager().beginTransaction();
        t.replace(R.id.main_frag, myNewFragment);
        t.commit();
}

前に作成した MyApplication クラスで

public void switchFragmentNormal(Activity a, Fragment newContent) {
        MainActivity fca = (MainActivity)a;
        fca.changeFragment(newContent);
}

そして今、最後に任意のフラグメントまたは SlideMenu から

これを行うだけです。

MyApplication MyApp;
public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

MyApp = (MyApplication)getActivity().getApplicationContext();

MyApp.switchFragmentNormal(getActivity(), new FragmentVote());
}

これで、変数メソッドなどを格納できるいつでも使用できるクラスができました。

:-)

于 2013-08-01T23:25:17.340 に答える
0

フラグメントを扱うときは、次のようにします。

MainActivity で:

public void changeFragment(int frag, Fragment myNewFragment) {
        FragmentTransaction t = getSupportFragmentManager().beginTransaction();
        t.replace(frag, myNewFragment);
        //t.addToBackStack(null);
        t.commit();
}

そして、私のMyApplication クラスy には小さな関数があるので、いつでも呼び出すことができます:

public void switchFragmentNormal(Activity a, Fragment newContent) {
        MainActivity fca = (MainActivity)a;
        fca.changeFragment(R.id.main_fragment, newContent);
}

このように、任意のフラグメントまたはスライド メニューから小さな呼び出しを行い、簡単に変更できます。必要なときに「新しい何か()」を作成します。

FragmentVote fvote = new FragmentVote();
MyApp.switchFragmentNormal(getActivity(), fvote);

フラグメントを変更してスライドメニュー「SlidingMenu- made by : jfeinstein10」を閉じるには、次のようにします。

SlidingMenu sm = getSlidingMenu();
sm.setMode(SlidingMenu.LEFT_RIGHT); 
...
   public void changeFragmentFromList(int frag, Fragment myNewFragment) {
            sm.toggle();    // this closes the slidemenu
            FragmentTransaction t = getSupportFragmentManager().beginTransaction();
            t.replace(frag, myNewFragment);
            t.commit();
    }

そしてそれを呼び出す:MyApplication クラス

public void switchFragmentNormalList(Activity a, Fragment newContent) {
        MainActivity fca = (MainActivity)a;
        fca.changeFragmentFromList(R.id.main_fragment, newContent);
}

次に、必要なときに「新しい何か()」を作成します。

FragmentVote fvote = new FragmentVote();
MyApp.switchFragmentNormalList(getActivity(), fvote);

次に、他のことなどを行うことができるように、フラグメントをスタックに追加したい場合があります。

これをチェックして:

https://stackoverflow.com/a/17978786/2625912

あなたを助けてください!

于 2013-08-01T22:07:22.540 に答える