国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中兩個類讓你再也不用實現onActivityResult()

2019-10-21 21:42:05
字體:
來源:轉載
供稿:網友

前言

當我們知道fragment僅僅可以收到自己請求的回調后,我們就可以用它來解耦activity中onActivityResult的邏輯了。一般情況下,如果一個activity中多個回調結果的話,onActivityResult()中會有各種case判斷,并且這種設計也打斷了流式寫法。那么我們索性建立一個無UI的fragment做精準的接收器,這樣就可以再也不寫onActivityResult()了。

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); }}

發(fā)送請求和監(jiān)聽請求的代碼:

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收不到結果的問題,請及時更新依賴。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 常州市| 新宁县| 东丰县| 桐乡市| 永顺县| 崇左市| 通海县| 辉县市| 双峰县| 章丘市| 封开县| 城步| 枝江市| 卢龙县| 大城县| 文水县| 新巴尔虎左旗| 铜鼓县| 清丰县| 任丘市| 交口县| 石棉县| 博兴县| 陆河县| 呼和浩特市| 丹东市| 光山县| 讷河市| 岑巩县| 丰城市| 沭阳县| 长武县| 颍上县| 合山市| 宁远县| 凤台县| 天祝| 定陶县| 宜州市| 湖南省| 米泉市|