2

SherlockNavigationDrawer の例を変更しようとしています。フラグメントは 1 つしかありませんが、すべてのフラグメントが同じではなく、それぞれ独自のレイアウトでフラグメントを追加することについては考えていません...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FrameLayout frame = new FrameLayout(this);
    frame.setId(CONTENT_VIEW_ID);
    setContentView(frame, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

    if (savedInstanceState == null) {
        setInitialFragment();
    }
}


private void setInitialFragment() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(CONTENT_VIEW_ID, MainFragment.newInstance()).commit();
}

しかし、私の考えは、MainFragment 内にあるリストビューからアイテムをクリックしたときに新しいフラグメントを呼び出すことです

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mContent.setText(Shakespeare.DIALOGUE[position]);
        mActionBar.setTitle(Shakespeare.TITLES[position]);
        mDrawerLayout.closeDrawer(listView);

       //START A NEW FRAGMENT HERE DEPENDING OF THE POSITION CLICKED
    }
}

それについて何か考えはありますか?前もって感謝します

4

2 に答える 2

1

amalBit に感謝しますが、selectItem メソッドは 2 番目と 3 番目のフラグメント内に配置しました.... 動作しますが、このソリューションでは、作成する追加の各フラグメント内にこのコードを配置する必要があります。 ....

//MainFragment
private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mContent.setText(Shakespeare.DIALOGUE[position]);
        mActionBar.setTitle(Shakespeare.TITLES[position]);
        //mDrawerLayout.closeDrawer(listView);

        selectItem(position);
    }
}

private void selectItem(int position) {

    FragmentTransaction ft = getSherlockActivity().getSupportFragmentManager().beginTransaction();
    // Locate Position
    switch (position) {
    case 0:
        ft.replace(666, SecondFragment.newInstance(), "SecondFragment");
        ft.addToBackStack("SecondFragment");
        break;
    case 1:
        ft.replace(666, ThirdFragment.newInstance(), "ThirdFragment");
        ft.addToBackStack("ThirdFragment");
        break;
    }
    ft.commit();
    mDrawerLayout.closeDrawer(listView);
}   

このコードをコントローラー MainActivity に移動する機会はありますか?

于 2013-11-16T09:31:11.430 に答える