从片段内部替换片段

时间:2018-11-25 09:19:46

标签: android android-fragments

我在线阅读内容,要调用另一个片段,以占用FrameLayout,您需要创建一个与活动对话的接口,并且当按钮单击活动中定义的接口内的函数时,会将Fragment替换为另一个片段,但是我没有直接创建接口,而是尝试直接在片段内部进行操作,并且可以正常工作。那么我为什么不应该这样做呢?

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class FragmentOne extends Fragment {


    public FragmentOne() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_fragment_one, container, false);

        Button btnONe = view.findViewById(R.id.btnOne);
        btnONe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onButtonPressed();
            }
        });

        return view;
    }

    public void onButtonPressed() {

        FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragmentContainer, new FragmentTwo("Femin Dharamshi did it!"));
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

    }

}

2 个答案:

答案 0 :(得分:2)

片段是Activity的一部分,片段应通过其父活动托管,如google在Android开发人员文档中所述。  您可以参考此链接: https://developer.android.com/training/basics/fragments/communicating

答案 1 :(得分:0)

您应该使用getFragmentManager().beginTransaction().replace(int id, Fragment fr).commit();方法而不是onViewCreated()方法调用onCreateView()

只需将onCreateView()中的代码移至onViewCreated()方法中即可。