0

私はここのチュートリアルに従っています:そして、このコードは私を混乱させています:

    /** Swaps fragments in the main content view */
    private void selectItem(int position) {
    // Create a new fragment and specify the planet to show based on position
    Fragment fragment = new PlanetFragment();
    Bundle args = new Bundle();
    args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
    fragment.setArguments(args);

    // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
               .replace(R.id.content_frame, fragment)
               .commit();

    // Highlight the selected item, update the title, and close the drawer
    mDrawer.setItemChecked(position, true);
    setTitle(mPlanetTitles[position]);
    mDrawerLayout.closeDrawer(mDrawer);

現在、アプリは正常に動作していますが、ナビゲーション ドロワーのボタンを押しても何も起こりません。ユーザーが 1 つのボタンを押すと、新しいFrameLayout. また別の質問: 私は私のactivity_main.xmlレイアウトにこれを持っています:

<!-- As the main content view, the view below consumes the entire
     space available using match_parent in both dimensions. -->
<FrameLayout  android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"> 
<ListView 
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:keepScreenOn="true"
>

    </ListView>

</FrameLayout>

<!-- android:layout_gravity="start" tells DrawerLayout to treat
     this as a sliding drawer on the left side for left-to-right
     languages and on the right side for right-to-left languages.
     The drawer is given a fixed width in dp and extends the full height of
     the container. A solid background is used for contrast
     with the content view. -->
<ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#111"/>

コンテンツを含むリスト ビューをまだ作成する必要があるかどうかは完全にはわかりません ( のListView内部FrameLayout)。独自のxmlレイアウトを作成しようとしましたが、それを参照して膨らませるとうまくいきListViewませんでした。フレームごとに個別の「xml」ファイルを設定しますか? もしそうなら、クリックされたボタンに基づいてそのフラグメントをどのように交換しますか? お時間をいただきありがとうございます。

編集!!これがSELECTITEMメソッドです

    private void selectItem(int position) {     

    Log.i("MainActivity", "selectItem()" + position);  //this gets called successfully

    //not sure if this equals() thing is the best way to do this
    if("Stuff".equals(getListView().getItemAtPosition(position))){

        Log.i("MainActivity", "getItemAtPosition()-Stuff" + position); //this doesn't get called

        mDrawerList.setItemChecked(position, true);
        setTitle(mPlanetTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);

    }else if("Stuff2".equals(getListView().getItemAtPosition(position))){

        Log.i("MainActivity", "getItemAtPosition()-Stuff2" + position); //this also doesn't get called

        mDrawerList.setItemChecked(position, true);
        setTitle(mPlanetTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);

        Intent openHelpAvtivity = new Intent("com.schrodingerscat.hh.math.glossary.THEOREMSLIST");
        startActivity(openHelpAvtivity); 

    }
4

2 に答える 2

0

それを私が直した!わーい!啓発のための@beeに感謝します!getListView() を使用する代わりに、私がしなければならなかったことは、代わりにこれを行いました:if("Stuff".equals(mDrawerList.getItemAtPosition(position))){}そして、それは最終的に機能しました!

于 2013-06-15T04:45:26.697 に答える
0

デバッガでステップスルーしてみましたか? selectItem() が呼び出されていますか? そうでない場合は、OnClickListener を正しく設定していることを確認してください。

フレームごとに個別の XML ファイルは必要ありません。(フレームとはどういう意味ですか? フラグメント? 私はそう思います。) 要点は、新しいフラグメントを作成し、setArguments() を使用して表示内容を設定できることです。リスト ビューには、提供されているように、次のコードでデータが取り込まれている必要があります。

    mPlanetTitles = getResources().getStringArray(R.array.planets_array);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, mPlanetTitles));

完全なサンプル コード ( http://developer.android.com/shareables/training/NavigationDrawer.zip ) をダウンロードしてみて、何が違うのかを確認してください。この例は再構築するのではなく、ダウンロードすることを意図していると思います。チュートリアル ページには、必要なすべてのコードが含まれているわけではありません。

于 2013-06-14T02:20:52.073 に答える