Android中兩個類讓你再也不用實現(xiàn)onActivityResult()
前言
當我們知道fragment僅僅可以收到自己請求的回調(diào)后,我們就可以用它來解耦activity中onActivityResult的邏輯了。一般情況下,如果一個activity中多個回調(diào)結(jié)果的話,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包已經(jīng)解決了fragment嵌套時里層的fragment收不到結(jié)果的問題,請及時更新依賴。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android通過XListView實現(xiàn)上拉加載下拉刷新功能
這篇文章主要為大家詳細介紹了Android通過XListView實現(xiàn)上拉加載下拉刷新功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android清空編輯框內(nèi)容功能的實現(xiàn)實例代碼
本篇文章主要介紹了Android清空編輯框數(shù)據(jù)功能的實現(xiàn)實例代碼,非常具有實用價值,需要的朋友可以參考下。2017-03-03
解析Android開發(fā)優(yōu)化之:軟引用與弱引用的應用
Java從JDK1.2版本開始,就把對象的引用分為四種級別,從而使程序能更加靈活的控制對象的生命周期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用,本篇文章重點介紹一下軟引用和弱引用2013-05-05
Android實現(xiàn)光點模糊漸變的自旋轉(zhuǎn)圓環(huán)特效
這篇文章主要為大家詳細介紹了Android實現(xiàn)光點模糊漸變的自旋轉(zhuǎn)圓環(huán)特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
TabLayout實現(xiàn)ViewPager指示器的方法
這篇文章主要為大家詳細介紹了TabLayout實現(xiàn)ViewPager指示器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
如何在原有Android項目中快速集成React Native詳解
創(chuàng)建一個React Native項目并寫一個純的 React Native 應用可以參考官方指南。下面這篇文章主要給大家介紹了關(guān)于如何在原有Android項目中快速集成React Native的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。2017-12-12
Android安裝apk文件并適配Android 7.0詳解
這篇文章主要介紹了Android安裝apk文件并適配Android 7.0詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

