Fragment 与 Activity 之间的数据传递

一、Fragment 与 Activity 之间的数据传递

1、ActivityFragment 传递数据

activity通过bundlefrgment传值

  • Activity
  public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private EditText mEdit;
    private Button mBtnSend;
    private FragmentManager manager;
    private FragmentTransaction transaction;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEdit=findViewById(R.id.et_content);
        mBtnSend=findViewById(R.id.btn_sendToFragment);
        manager = getSupportFragmentManager();
        transaction = manager.beginTransaction();
        transaction.add(R.id.fg_content,new BlankFragment(),"BlankFragment");
        mBtnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String txt=mEdit.getText().toString().trim();
                if (!TextUtils.isEmpty(txt)){
                    BlankFragment mBlankFragment=new BlankFragment();
                    Bundle bundle = new Bundle();
                    bundle.putString("Msg", txt);
                    mBlankFragment.setArguments(bundle);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fg_content, mBlankFragment).commit();

                }
            }
        });
    }
}
  • Fragment
	private TextView mTvContent;
    private String msg;
    public BlankFragment() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle arguments = getArguments();
        if (arguments != null) {
           msg=arguments.getString("Msg",null);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_blank, container, false);
        mTvContent=view.findViewById(R.id.fg_recieve_msg);
        mTvContent.setText(msg);
        return view;
    }

2、FragmentActivity传值

(接口回调)

  1. fragment中准备回调接口,接口中声明传值的回调方法
  2. fragment中定义变量 private MyListener myListener
  3. 重写fragment中的onAttach()方法:listener = (MyLisener)getActivity();
  4. fragment触发事件时回传值
  5. Activity中实现回调接口,重写回调方法获取回传的值并显示
  • Activity
public class ContentActivity extends AppCompatActivity implements SendMsgFragment.MyListener {

    private FragmentManager manager;
    private String receive_msg;
    private TextView mTvReceiveMsg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content);
        mTvReceiveMsg=findViewById(R.id.tv_receive_activity);
    }

    @Override
    public void sendValue(String value) {
        receive_msg=value;
        mTvReceiveMsg.setText(receive_msg);
        Log.d("tag", value);
    }
}
  • Fragment
public class SendMsgFragment extends Fragment {

    private EditText mEtFragmentMsg;
    private Button mBtnSendMsg;
    private MyListener listener;
    
    public SendMsgFragment() {

    }

    public interface MyListener{
        void sendValue(String value);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

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

        View view=inflater.inflate(R.layout.fragment_send_msg, container, false);
        mEtFragmentMsg = view.findViewById(R.id.et_send_fragment);
        mBtnSendMsg=view.findViewById(R.id.btn_sendToActivity);
        mBtnSendMsg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.sendValue(mEtFragmentMsg.getText().toString().trim());
            }
        });

        return view;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        listener= (MyListener) getActivity();
    }
}

3、FragmentFragment 传值

  • Activity
public class MainFragmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_fragment);
    }
}
  • LeftFragment
public class LeftFragment extends Fragment {

    private EditText mEtLeft;
    private Button mBtnLeft;
    public LeftFragment() {
        // Required empty public constructor
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

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

        View view=inflater.inflate(R.layout.fragment_left, container, false);
        mEtLeft=view.findViewById(R.id.et_left_fragment);
        mBtnLeft=view.findViewById(R.id.btn_sendToRightFragment);
        mBtnLeft.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String s = mEtLeft.getText().toString().trim();

                // 方式一
                RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
                rightFragment.setTextView(s);

                // 方式二
                View rigthView = getFragmentManager().findFragmentById(R.id.right_fragment).getView();
                TextView rightTextView = rigthView.findViewById(R.id.tv_right_fragment);
                rightTextView.setText(s);

                // 方式三
                TextView textView=getActivity().findViewById(R.id.right_fragment);
                textView.setText(s);
            }

        });
        return view;
    }
}
  • RightFragment
public class RightFragment extends Fragment {

    private TextView mTvRight;

    public RightFragment() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.fragment_right, container, false);
        mTvRight=view.findViewById(R.id.tv_right_fragment);
        return view;
    }

    public void setTextView(String value){
        mTvRight.setText(value);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值