0

A と B という 2 つのフラグメントが内部にある Android アクティビティがあります。A 内のボタンをクリックして、B が C、D、または E に切り替えられるようにしたいと考えています。

レイアウトはそれぞれ.xmlを参照し、すべてのレイアウトには、他のフラグメントを呼び出したり、他のものを実行したりするさまざまなボタンがあります....

今main.javaで:

public void stackAFragment(int page) {

//depending on which button on the list is clicked, the corresponding fragment is replaced
if (npage = 1){
Fragment f = new FragmentB();}

if (npage = 2){
Fragment f = new FragmentC();}

if (npage = 3){
Fragment f = new FragmentD();}

FragmentTransaction ft = getFragmentManager().beginTransaction()
ft.replace(R.id.frag_content, f); 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
ft.addToBackStack(null); 
ft.commit();}

次に、A.java にはリスト ビューがあり、リスナーには

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Main main = (Main) getActivity();
main.stackAFragment(arg2 + 1); }

そしてB.javaで:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
View c = inflater.inflate(R.layout.frag_b, container, false);
return c;}

そしてC.javaで:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
View c = inflater.inflate(R.layout.frag_c, container, false);
return c;}

等々.....

これで、最初のページにフラグメント A と B が表示されます。

しかし、クリックしてフラグメント C に変更すると、フラグメント B は消えず、代わりにフラグメント C がフラグメント B の下に表示されます

クリックしてフラグメント D に変更すると、フラグメント C は消えますが、B は残ります....

どうすれば問題を解決できますか??

ありがとうございました!!!誰かが私を正しい方向に向けることができれば、非常に感謝します.....

追加情報:::: main.xml のレイアウト

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frags"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SlidingMenu" >

<fragment
    android:id="@+id/frag_content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    class="com.seapointcorp.enque01.ContentFragment" />

<fragment
    android:id="@+id/frag_title"
    android:layout_width="@dimen/titles_size"
    android:layout_height="match_parent"
    class="com.seapointcorp.enque01.TitleFragment" />

</FrameLayout>
4

2 に答える 2

1

コードの主な問題は、レイアウト ファイルのアイテムFragmentTransactionの ID を使用して置換を行っていることです (したがって、基本的にフラグメント内で ID を使用して置換を行います (これはフラグメント B であると想定しています))。代わりに、コンテンツ フラグメントが追加/削除/置換される領域として機能するラッパー レイアウト (単純ななど) が必要です。Fragmentfrag_contentFrameLayoutRelativeLayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frags"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SlidingMenu" >

    <FrameLayout android:id="@+id/content"     android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <fragment
           android:id="@+id/frag_content"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           class="com.seapointcorp.enque01.ContentFragment" />
    </FrameLayout>
    <fragment
        android:id="@+id/frag_title"
        android:layout_width="@dimen/titles_size"
        android:layout_height="match_parent"
        class="com.seapointcorp.enque01.TitleFragment" />

    </FrameLayout>
</FrameLayout>

次に、stackAFragment()メソッドで次のことを行います。

FragmentTransaction ft = getFragmentManager().beginTransaction()
ft.replace(R.id.content, new tagetFragment()); 
 ft.addToBackStack(null);

            // Commit the transaction
            ft.commit();
//...
于 2013-01-22T09:37:24.503 に答える
0

あなたのホストでactivity

public static FragmentListener sFragmentListener;    

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    // Do normal work.
    sFragmentListener = new FragmentListener();
    // Do more work.
}

public interface FragmentListener {
        void onNextFragment();
    }

    public final class FragmentListenerListener {

        @Override
        public void onShowNextFragment() {
            // Do Fragment Transition
            mFragmentTransition.replace(R.id.awesomeContainer, new A.class);
        }

    }

のメソッドで call:メソッドを実行するFragmentだけです。OnClickHostActivity.sFragmentListener.onShowNextFragment()

これは必要に応じて変更できます。

于 2013-01-22T09:26:42.863 に答える