Fragment向Activity传递数据

发布时间 2023-03-25 15:48:32作者: 冰稀饭Aurora

继续学习fragment,显然我们的系统还需要做到Fragment向Activity传递数据。

看一下演示效果

 

 我们在activity中写一个方法,用于设置activity中的textview

然后再在fragment中写一个按钮,点击事件设置成用getActivity调用刚才的方法,然后设置内容。

((DynamicFragmentActivity)getActivity()).setTvReceive("这是fragment向activity传递数据");

代码实现:

activity

package com.example.dataapplication.fragment;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.example.dataapplication.DynamicFragmentActivity;
import com.example.dataapplication.R;

public class BlankFragment2 extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1,mParam2;
    private String data;
    private int int_data;
    private TextView mTextView;
    private EditText mEditText;
    private Button mBtn1;
    public BlankFragment2(String data) {
        mParam1 = data;
    }
    public BlankFragment2() {
    }
    public void setArgParam1(String data){
        this.mParam1 = data;
        if (!TextUtils.isEmpty(mParam1)){
            mTextView.setText(mParam1);
        }
    }
    public static BlankFragment2 newInstance(String param1, String param2) {
        BlankFragment2 fragment = new BlankFragment2();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);

            data = getArguments().getString("data");
            int_data   = getArguments().getInt("int_data");

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_blank2, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mEditText = view.findViewById(R.id.frag_edit_1);
        mTextView = view.findViewById(R.id.frag_tv_1);
        mBtn1     = view.findViewById(R.id.frag_btn_1);

        mBtn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((DynamicFragmentActivity)getActivity()).setTvReceive("这是fragment向activity传递数据");
            }
        });
        if (!TextUtils.isEmpty(mParam1)){
            mTextView.setText(mParam1);
        }
        if (!TextUtils.isEmpty(data)){
            mTextView.setText(data+int_data);
        }
    }
}

fragment

package com.example.dataapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.example.dataapplication.fragment.BlankFragment1;
import com.example.dataapplication.fragment.BlankFragment2;

public class DynamicFragmentActivity extends AppCompatActivity {

    private TextView tvReceive;
    private String mData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dynamic_fragment);

        tvReceive = findViewById(R.id.frag_dy_tv_1);

        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.frag_dy_1,BlankFragment2.class, null)
                .commit();

    }

    public void setTvReceive(String data){
        mData = data;
        tvReceive.setText(mData);
    }
   
}