的常用方法有以下几种:
示例代码:
在DialogFragment中定义接口:
public class MyDialogFragment extends DialogFragment {
// 定义接口
public interface OnDataSelectedListener {
void onDataSelected(String data);
}
private OnDataSelectedListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mListener = (OnDataSelectedListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnDataSelectedListener");
}
}
// 在需要返回数据的地方调用接口方法
private void sendData(String data) {
mListener.onDataSelected(data);
}
}
在调用DialogFragment的活动中实现接口:
public class MainActivity extends AppCompatActivity implements MyDialogFragment.OnDataSelectedListener {
// ...
@Override
public void onDataSelected(String data) {
// 处理返回的数据
Log.d("MainActivity", "Selected data: " + data);
}
}
示例代码:
在调用DialogFragment的Fragment中设置目标Fragment和调用方法:
public class MyFragment extends Fragment {
// ...
private void showDialogFragment() {
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.setTargetFragment(this, 1);
dialogFragment.show(getFragmentManager(), "dialog");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
String result = data.getStringExtra("data");
// 处理返回的数据
Log.d("MyFragment", "Selected data: " + result);
}
}
}
在DialogFragment中调用目标Fragment的onActivityResult方法传递数据:
public class MyDialogFragment extends DialogFragment {
// ...
private void sendData(String data) {
Intent intent = new Intent();
intent.putExtra("data", data);
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
}
}
示例代码:
在DialogFragment中更新ViewModel的数据:
public class MyDialogFragment extends DialogFragment {
// ...
private void sendData(String data) {
MyViewModel viewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);
viewModel.setData(data);
}
}
在调用DialogFragment的活动中观察ViewModel的数据变化:
public class MainActivity extends AppCompatActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);
viewModel.getData().observe(this, new Observer<String>() {
@Override
public void onChanged(String data) {
// 处理返回的数据
Log.d("MainActivity", "Selected data: " + data);
}
});
}
}
以上是将数据从DialogFragment返回到调用活动的几种常用方法,根据具体的需求和场景选择适合的方法进行数据的传递和处理。
领取专属 10元无门槛券
手把手带您无忧上云