Androidの中の二つの種類はもうあなたにonActivityResoultを実現させません。
3318 ワード
前言
私たちはfragmentが自分の要求の返事を受け取っただけで、それを使ってactivityのonActivityResoultの論理を解くことができます。一般的に、activityの中で複数のフィードバック結果を出すと、onActivityResoult()には様々なcase判定があり、またこのようなデザインも流式表記を中断します。いっそのこと、UIなしのfragmentを正確に受信機にしたら、onActivityResoultを書かなくてもいいです。
Fragment:
最新のsupportパッケージはすでにfragmentのネストされていますが、中間層のfragmentが結果を収めることができない問題が解決されました。直ちに依存を更新してください。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。
私たちはfragmentが自分の要求の返事を受け取っただけで、それを使ってactivityのonActivityResoultの論理を解くことができます。一般的に、activityの中で複数のフィードバック結果を出すと、onActivityResoult()には様々なcase判定があり、またこのようなデザインも流式表記を中断します。いっそのこと、UIなしのfragmentを正確に受信機にしたら、onActivityResoultを書かなくてもいいです。
Fragment:
/**
* @author Kale
* @date 2018/4/13
*/
public class OnActResultEventDispatcherFragment extends Fragment {
public static final String TAG = "on_act_result_event_dispatcher";
private SparseArray<ActResultRequest.Callback> mCallbacks = new SparseArray<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void startForResult(Intent intent, ActResultRequest.Callback callback) {
mCallbacks.put(callback.hashCode(), callback);
startActivityForResult(intent, callback.hashCode());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ActResultRequest.Callback callback = mCallbacks.get(requestCode);
mCallbacks.remove(requestCode);
if (callback != null) {
callback.onActivityResult(resultCode, data);
}
}
}
パッケージの要求:
public class ActResultRequest {
private OnActResultEventDispatcherFragment fragment;
public ActResultRequest(Activity activity) {
fragment = getEventDispatchFragment(activity);
}
private OnActResultEventDispatcherFragment getEventDispatchFragment(Activity activity) {
final FragmentManager fragmentManager = activity.getFragmentManager();
OnActResultEventDispatcherFragment fragment = findEventDispatchFragment(fragmentManager);
if (fragment == null) {
fragment = new OnActResultEventDispatcherFragment();
fragmentManager
.beginTransaction()
.add(fragment, OnActResultEventDispatcherFragment.TAG)
.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}
return fragment;
}
private OnActResultEventDispatcherFragment findEventDispatchFragment(FragmentManager manager) {
return (OnActResultEventDispatcherFragment) manager.findFragmentByTag(OnActResultEventDispatcherFragment.TAG);
}
public void startForResult(Intent intent, Callback callback) {
fragment.startForResult(intent, callback);
}
public interface Callback {
void onActivityResult(int resultCode, Intent data);
}
}
要求と傍受要求のコードを送信:
Intent intent = new Intent(this, SecondActivity.class);
request.startForResult(intent, new ActResultRequest.Callback() {
@Override
public void onActivityResult(int resultCode, Intent data) {
Toast.makeText(MainActivity.this, "" + resultCode, Toast.LENGTH_SHORT).show();
}
});
余談:最新のsupportパッケージはすでにfragmentのネストされていますが、中間層のfragmentが結果を収めることができない問題が解決されました。直ちに依存を更新してください。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。