Fragment嵌套

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:外层两个Fragment我的,你的。我的中又包括两个Fragment。

Activity核心代码

public class FragmentActivity extends AppCompatActivity{

    private RadioGroup group;

    private FragmentManager manager;
    private FragmentTransaction transaction;
    Framgent1 fragment1;
    Fragment2 fragment2;
    public static String mesg;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        init();

        group = findViewById(R.id.radioGroup_group1);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.radio_my:
                        getSupportFragmentManager().beginTransaction()
                                //.addToBackStack(null) //入栈
                                //.replace(R.id.freal_fragment,fragment2)
                                .hide(fragment2)
                                .show(fragment1)
                                .commit();
                        break;
                    case R.id.radio_your:
                         getSupportFragmentManager().beginTransaction()
                                 ////入栈
                                 //.addToBackStack(null) //入栈
                                // .replace(R.id.freal_fragment,fragment1)
                                 .hide(fragment1)
                                 .show(fragment2)
                                 .commit();
                        break;
                }
            }
        });
     }

    /**
     * 将Fragment加到事务中
     */
    public void init(){
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        fragment1 = new Framgent1();
        fragment2 = new Fragment2();
        fragment1.setImpl(fragment2); //要接口给实现类(多态)
        transaction.add(R.id.freal_fragment,fragment1);
        transaction.add(R.id.freal_fragment,fragment2); //桔色
        transaction.commit();
     }

     public void exit(){
       int count = getSupportFragmentManager().getBackStackEntryCount();
       if(count == 0){
           finish();
       }
       getSupportFragmentManager().popBackStack();
     }
}

Fragment1

public class Framgent1 extends Fragment {
    private static final String LOG_ID = "amy";

    Button button;
    SendMessageImpl impl; //接口
    Button button3;
    Button button4;
    Fragment3 f3;
    Fragment4 f4;

    public void setImpl(SendMessageImpl impl){
        this.impl = impl;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d(LOG_ID,"onCreate");
        super.onCreate(savedInstanceState);
        //空白的Fragment
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.d(LOG_ID,"onCreateView");
        View view = inflater.inflate(R.layout.fragment1_layout,null);
        button = view.findViewById(R.id.btn_fragment1);
        button3 = view.findViewById(R.id.btn_fragment3);
        button4 = view.findViewById(R.id.btn_fragment4);
        f3 = new Fragment3();
        f4 = new Fragment4();

        getChildFragmentManager().beginTransaction()
                .add(R.id.frame_fragment1,f3)
                .add(R.id.frame_fragment1,f4)
                .commit();
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.d(LOG_ID,"onActivityCreated");
        super.onActivityCreated(savedInstanceState);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //Toast.makeText(getActivity(), "111", Toast.LENGTH_SHORT).show();

//                //发送消息给Activity通过Handler方式
//                Message message = new Message();
//                message.what = 1;
//                message.obj = "activity你好吗?";
//                Fragment2.handler.sendMessage(message);

                impl.fasong("fragment2你好吗?");
            }
        });

        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显示F3
                getChildFragmentManager().beginTransaction()
                        .hide(f4)
                        .show(f3)
                        .commit();

            }
        });


        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显示F4
                getChildFragmentManager().beginTransaction()
                        .hide(f3)
                        .show(f4)
                        .commit();
            }
        });
    }
 }

Fragment2

public class Fragment2 extends Fragment implements SendMessageImpl{

    static TextView textView;
    static String message;

    public static Handler handler = new Handler(){
        //收消息
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what == 1){
                textView.setText(msg.obj.toString());
            }
        }
    };

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2_layout,null);
        textView = view.findViewById(R.id.txt_fragment2);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d("amy","onActivityCreated:"+message);
    }

    @Override  //fragment2你好呀
    public void fasong(String message) {
        textView.setText(message); //fragment1发来的内容
    }
}

Fragment3

public class Fragment3 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment3_layout,null);
    }
}

Fragment4

public class Fragment4 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment4_layout,null);
    }
}

接口

public interface SendMessageImpl {

    public void fasong(String message);
}

猜你喜欢

转载自blog.csdn.net/amynn/article/details/106841820
今日推荐