3

だから私は on MAIN ACTIVITY(M)、 two FRAGMENTS(F1, F2)、およびBUTTON(B)onを持っていF1ます。

メインアクティビティが開始F1されると、これは問題なく自動的にロードされます。私がしたいのは、F2on をクリックしたときに開始することです。BF1

以下は、HomeFragment である Fragment1 の私のコードです。

package info.androidhive.slidingmenu;

import java.lang.reflect.Field;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;

public class HomeFragment extends Fragment {

 public static HomeFragment newInstance() 
 {
        return new HomeFragment();
    }

public HomeFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState){


    View rootView = inflater.inflate(R.layout.fragment_home, container, false);

    ImageButton ib = (ImageButton) rootView.findViewById(R.id.buttonEnq);
    ib.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            InfoFragment infoFragment = new InfoFragment();
            /*FragmentManager fm = getFragmentManager();
            fm.beginTransaction().replace(R.id.frame_container, infoFragment).commit();
            */

            FragmentTransaction ft = getChildFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.abc_slide_out_bottom, 0);
            ft.replace(R.id.frame_container,infoFragment);
            ft.commit();
        }
    });

    ViewPager viewPager = (ViewPager)rootView.findViewById(R.id.myfivepanelpager);
    ImageAdapter adapter1 = new ImageAdapter(this.getActivity());
    viewPager.setAdapter(adapter1);

    return rootView;

    }

@Override
public void onDetach(){
    super.onDetach();

    try{

        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this,null);

    }catch(NoSuchFieldException e){
        throw new RuntimeException(e);
    }catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
  } 
}

frame_container内のコンテナの名前ですmain_activity.xml。私は次の投稿を試しました:

私が間違っていることを教えてもらえますか?

4

1 に答える 1

5

Fragment B問題は、 の子フラグメントとしてFragment Aを追加しようとしていることです。フラグメント A レイアウト (R.layout.fragment_home) のビューではないR.id.frame_containerと思われます。frame_container

getChildFragmentManager() を使用していつでも子フラグメントを追加できますが、フラグメントを保持するためのコンテナが必要です。

あなたの場合、フラグメント B をフラグメント A の子として追加する必要はありません。

Activity Fragment Manager を使用して、Activity に添付されている Fragment A を Fragment B に置き換える必要があります。

ButtononClick()の行を変更します

FragmentTransaction ft = getChildFragmentManager().beginTransaction();

なので

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
于 2014-04-18T03:39:15.040 に答える