sag*_*uri 3 android android-fragments
我有2 Fragments
A和B.我开始Fragment B
从Fragment A
.我需要将数据从之前传递Fragment B
到关闭Fragment A
之前Fragment B
.它的startActivityForResult()
想法很像.
在片段AI中我正在调用片段B:
FragmentB calendarDialog = new FragmentB();
calendarDialog.setTargetFragment(CurrentPanchangDialog.this, 1);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left);
transaction.add(android.R.id.content, calendarDialog).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)
现在在Fragment BI中我在关闭时调用这样的东西:
getTargetFragment().onActivityResult(
getTargetRequestCode(),
Activity.RESULT_OK,
new Intent().putExtra("data", "datafrom C")
);
getActivity().getSupportFragmentManager().popBackStackImmediate();
Run Code Online (Sandbox Code Playgroud)
现在在基础活动中我压倒一切onActivityForResult()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment pFragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (pFragment instanceof CurrentPanchangDialog) {
if (pFragment != null) {
pFragment.onActivityResult(requestCode, resultCode, data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
我没有将数据从片段B返回到片段A.
•使用如下方法创建一个接口:
public interface FragmentCallback {
void onDataSent(String yourData);
}
Run Code Online (Sandbox Code Playgroud)
•在FragmentA中实现此接口并实现onDataSent()方法:
public class FragmentA implements FragmentCallback {
@Override
void onDataSent(String yourData){
//Do something with your data
}
}
Run Code Online (Sandbox Code Playgroud)
•在Fragment B中声明此接口变量并创建公共setter方法:
public class FragmentB {
private FragmentCallback fragmentCallback;
public void setFragmentCallback(FragmentCallback callback) {
this.fragmentCallback = callback;
}
}
Run Code Online (Sandbox Code Playgroud)
•在某处使用FragmentA将其设置为FragmentB实例上的回调:
fragmentB.setFragmentCallback(this);
Run Code Online (Sandbox Code Playgroud)
•从FragmentB到FragmentA的路径数据(如果要在FragmentB即将关闭时发送数据,则可以从片段的生命周期方法之一执行此操作):
public class FragmentB {
public void onDestroy() {
if(fragmentCallback != null){
fragmentCallback.onDataSent("Some data from FragmentB");
}
super.onDestroy();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2447 次 |
最近记录: |