安卓开发之Fragment数据传输到Activity+实例分析

Posted ggzx666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发之Fragment数据传输到Activity+实例分析相关的知识,希望对你有一定的参考价值。

系列文章:安卓开发之Activity传输数据到Fragmen+实例分析

上一个文章讲了如何从Activity传输数据到Fragment,但是Fragment见到Activity总不能空着手吧。
这里简要介绍如何从Fragment传输数据到Activity。

:步骤简介

1.编写接口在fragment中

private OnButtonClickListener mOnButtonClickListener;
//设置接口方法:
    //定义接口
    public interface OnButtonClickListener {
        void onClick(String title);//这里title是传递给activity的数据
    }
 

2.在fragment的onAttach方法中

super.onAttach(context);
        mOnButtonClickListener =(OnButtonClickListener) getActivity();//获取实现接口的activity

3.在fragment的oncreateView中的button点击事件:

button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if (mOnButtonClickListener!=null){//不为空的时候,就会执行回调
                   mButton="ggzx";//将ggzx回传
                   mOnButtonClickListener.onClick(mButton);
               }
           }
       });

4.实现onclick方法

    @Override
    public void onClick(String title) {
        setTitle(title);
        Log.e(TAG, "activity onClick: ");
    }

:实战分析

场景说明:首先activity中顶层布局是限制布局,作为fragment的容器,activity启动时,动态加载fragment,当点击fragment的button时候,会将一个字符串回调给主活动,主活动的实现的接口中onclick方法接收到数据,将Title换成一个字符。

代码:

public class BlankFragment extends Fragment {
    Button button;
    String mButton;
    String TAG="ggzx";
    private OnButtonClickListener mOnButtonClickListener;
    public static BlankFragment newInstance(String Button){
        BlankFragment blankFragment=new BlankFragment();
        Bundle bundle=new Bundle();
        bundle.putString("bundle_Button",Button);
        blankFragment.setArguments(bundle);
        return blankFragment;
    }
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        //获取实现接口的activity
        mOnButtonClickListener =(OnButtonClickListener) getActivity();
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_blank,container,false);
        button=view.findViewById(R.id.button);
        Log.e(TAG, "Fragment onCreateView: ");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnButtonClickListener!=null){//不为空的时候,就会执行回调
                    mButton="ggzx";//将ggzx回传
                    mOnButtonClickListener.onClick(mButton);
                }
            }
        });
        return view;
    }
    //定义接口
    public interface OnButtonClickListener {
        void onClick(String title);
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity implements BlankFragment.OnButtonClickListener {
    Button button2;
    String TAG="ggzx";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, " activity onCreate: ");

        BlankFragment blankFragment=BlankFragment.newInstance("ggzx");
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.Constrain_main_container,blankFragment)
                .commit();

    }

    @Override
    public void onClick(String title) {
        setTitle(title);
        Log.e(TAG, "activity onClick: ");
    }
}

以上是关于安卓开发之Fragment数据传输到Activity+实例分析的主要内容,如果未能解决你的问题,请参考以下文章

第六章:安卓开发之Fragment2

安卓开发 viewpage加fragment加listview. 我想实现一个类似微信的界面。

Android安卓开发之activity如何传值到fragment,activity与fragment传值

安卓之碎片Fragment介绍

Android开发之多Fragment切换优化

Android中打开其他应用(或者系统应用)Activity或者Fragment总结