2. Fragment向Activity传递数据
- Fragment中定义传值的回调接口,在生命周期的
onAttach()
或onCreate()
方法中获取接口的实现,一般也就是相应的Activity。
public class ResourceFragment extends Fragment {
private EditText et_content;
private Button btn_pass;
public MyListener listener;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = (MyListener) getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_resource, null);
et_content = view.findViewById(R.id.et_content);
btn_pass = view.findViewById(R.id.btn_pass);
btn_pass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String info = et_content.getText().toString().trim();
listener.sendMessage(info);
}
});
return view;
}
public interface MyListener {
public abstract void sendMessage(String str);
}
}
- Fragment需要传值的位置调用接口回调方法传值。
btn_pass = view.findViewById(R.id.btn_pass);
btn_pass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String info = et_content.getText().toString().trim();
listener.sendMessage(info);
}
});
- Activity实现回调接口重写回调方法获取传递的值。
public class MainActivity extends AppCompatActivity implements ResourceFragment.MyListener {
private TextView tv_show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_show = findViewById(R.id.tv_show);
}
@Override
public void sendMessage(String str) {
if (str != null && !"".equals(str)) {
tv_show.setText(str);
}
}
}
- 最终效果

当点击Fragment里面的【点击传值】按钮时,将Fragment中的EditText里面的文本传递给Activity,并在Activity中的TextView显示。