iOS中很容易给UIViewController传递Delegate,block,做到两个页面数据的交互,但是Android做到这点却不容易,模仿iOS整理出一套方案来,如下:
public class SearchActivity extends BaseActivity {
private static class SearchHelper {
public static SearchActivity.SearchDelegate searchDelegate;
public static Fragment getSearchResultFragment(String keyword) {
if (searchDelegate != null) {
return searchDelegate.getSearchResultFragment(keyword);
}
return null;
}
}
public interface SearchDelegate {
Fragment getSearchResultFragment(String keyword);
}
public static<T extends SearchDelegate> void startActivity(Context context, T searchDelegate) {
//设置delegate
SearchHelper.searchDelegate = searchDelegate;
Intent intent = new Intent(context, SearchActivity.class);
context.startActivity(intent);
}
@Override
protected int getLayoutId() {
return R.layout.activity_search;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
……
}
private void doSearch(String keyword) {
//调用delegate的方法
fragment = SearchHelper.getSearchResultFragment(null, null, "keyword");
}
}
该方案能满足我们的需求,但是是有缺陷的,该SearchActivity只能同时存在一个,否则delegate串了,使用的时候要注意下。