一、Fragment 与 Activity 之间的数据传递
1、Activity
向 Fragment
传递数据
activity
通过bundle
向frgment
传值
- 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、Fragment
向Activity
传值
(接口回调)
fragment
中准备回调接口,接口中声明传值的回调方法- 在
fragment
中定义变量private MyListener myListener
- 重写
fragment
中的onAttach()
方法:listener = (MyLisener)getActivity();
fragment
触发事件时回传值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、Fragment
向 Fragment
传值
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);
}
}