修改xutils框架以支持fragment
16lz
2021-01-24
好像xutils框架目前还不支持fragment的反射,看了下,比较好改,主要修改ViewFinder。
修改一:
ViewUtils.java
public static void inject(Fragment fragment) { injectObject(fragment, new ViewFinder(fragment));}
修改二:
ViewFinder.java
import android.app.Activity;import android.content.Context;import android.preference.Preference;import android.preference.PreferenceActivity;import android.preference.PreferenceGroup;import android.support.v4.app.Fragment;import android.view.View;public class ViewFinder { private View view; private Activity activity; private Fragment fragment; private PreferenceGroup preferenceGroup; private PreferenceActivity preferenceActivity; public ViewFinder(View view) { this.view = view; } public ViewFinder(Activity activity) { this.activity = activity; } public ViewFinder(Fragment fragment) { this.fragment = fragment; } public ViewFinder(PreferenceGroup preferenceGroup) { this.preferenceGroup = preferenceGroup; } public ViewFinder(PreferenceActivity preferenceActivity) { this.preferenceActivity = preferenceActivity; this.activity = preferenceActivity; } public View findViewById(int id) { // 修改这里// View v = activity == null ? view.findViewById(id) : activity.findViewById(id); View v = null; if(activity != null) { v = activity.findViewById(id); } else if(this.fragment != null) { v = this.fragment.getView().findViewById(id); } else { v = view.findViewById(id); } return v; } public View findViewByInfo(ViewInjectInfo info) { return findViewById((Integer) info.value, info.parentId); } public View findViewById(int id, int pid) { View pView = null; if (pid > 0) { pView = this.findViewById(pid); } View view = null; if (pView != null) { view = pView.findViewById(id); } else { view = this.findViewById(id); } return view; } @SuppressWarnings("deprecation") public Preference findPreference(CharSequence key) { return preferenceGroup == null ? preferenceActivity.findPreference(key) : preferenceGroup.findPreference(key); } public Context getContext() { if (view != null) return view.getContext(); if (activity != null) return activity; if (preferenceActivity != null) return preferenceActivity; if (fragment != null) return fragment.getActivity(); return null; }}
如何使用:
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_home, null); return v;}public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ViewUtils.inject(this); AppLog.log("homefragment.onCreateView" + this.title_icon); initView();}
更多相关文章
- Android(安卓): 自己写个HTTP框架
- android安卓手机分屏多窗口实现方法
- Android(安卓)使用 HTTPS
- Android四大图片缓存框架之-Fresco之initialize(二)
- Binder框架的一些简单总结(关于自定义服务中的Binder)
- Android(安卓)驱动之旅 第五章: 在Android(安卓)系统的应用程序框
- android 如何绕过签名校验
- [日更-2019.5.21] Android(安卓)系统的分区和文件系统(一)--Androi
- Android(安卓)App整体架构设计的思考