Activity与Fragment的简单封装

    xiaoxiao2021-03-25  168

    在android开发中activity与fragment是每个项目最基本的类,所以对它们二者的封装也是非常有必要的,今天就把这两个类简单的封装一下。

    1、activity的封装

    public abstract class BaseActivity extends AppCompatActivity implements OnClickListener{ @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { // 设置全屏 this.getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState, persistentState); setContentView(setLayout()); setView(); setData(); } /** * 绑定布局 * @return */ protected abstract int setLayout(); /** * 初始化组件 */ protected abstract void setView(); /** * 设置数据等逻辑代码 */ protected abstract void setData(); /** * 简化findViewById() * @param resId * @param <T> * @return */ protected <T extends View> T fvbi(int resId){ return (T) findViewById(resId); } /** * Intent跳转 * @param context * @param clazz */ protected void toClass(Context context,Class<? extends BaseActivity> clazz){ toClass(context,clazz,null); } /** * Intent带值跳转 * @param context * @param clazz * @param bundle */ protected void toClass(Context context, Class<? extends BaseActivity> clazz, Bundle bundle){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); startActivity(intent); } /** * 带返回值的跳转 * @param context * @param clazz * @param bundle * @param reuqestCode */ protected void toClass(Context context,Class<? extends BaseActivity> clazz,Bundle bundle,int reuqestCode){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); startActivityForResult(intent,reuqestCode); } }

    在activity中的onCreate()方法,findviewbyid()方法,以及一些跳转传值等,这些都是经常要用到的,所以把这些方法都封装在一起,用的时候能少写一些重复的代码。

    2、fragment的封装 , fragment的封装与activity类似

    public abstract class BaseFragment extends Fragment implements OnClickListener{ protected Context mContext; /** * 当fragment与activity发生关联时调用 * @param context 与之相关联的activity */ @Override public void onAttach(Context context) { super.onAttach(context); mContext = context; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(setLayout(),null); return view; } /** * 绑定布局 * @return */ protected abstract int setLayout(); @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(); } /** * 初始化组件 */ protected abstract void initView(); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } /** * 设置数据等逻辑代码 */ protected abstract void initData(); /** * 简化findViewById * @param resId * @param <T> * @return */ protected <T extends View> T fvbi(int resId){ return (T) getView().findViewById(resId); } /** * intent跳转 * @param context * @param clazz */ protected void toClass(Context context,Class<? extends BaseActivity> clazz){ toClass(context,clazz,null); } /** * intent带值跳转 * @param context * @param clazz * @param bundle */ protected void toClass(Context context,Class<? extends BaseActivity> clazz,Bundle bundle){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); context.startActivity(intent); } /** * 带返回值的跳转 * @param context * @param clazz * @param bundle * @param requestCode */ protected void toClass(Context context,Class<? extends BaseActivity> clazz,Bundle bundle,int requestCode){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); getActivity().startActivityForResult(intent,requestCode); } }

    3、BaseActivity的使用

    public class NextActivity extends BaseActivity{ private TextView mTextView; @Override protected int setLayout() { return R.layout.activity_main; } @Override protected void setView() { mTextView = fvbi(R.id.tv); mTextView.setOnClickListener(this); } @Override protected void setData() { mTextView.setText("who are you"); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv: toClass(NextActivity.this, MainActivity.class); break; } } }

    4、BaseFragment的使用

    public class TestFragment extends BaseFragment { private TextView mTextView; @Override protected int setLayout() { return R.layout.activity_main; } @Override protected void initView() { mTextView = fvbi(R.id.tv); mTextView.setOnClickListener(this); } @Override protected void initData() { mTextView.setText("fragment"); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv: toClass(mContext,MainActivity.class); break; } } }

    上述的封装,只是一些简单的封装,如果在项目中有一些其他的功能,几乎是每个activity或fragment都会用到的话,就把它封装在这两个类里。在刚学习的时候对于老师所讲的封装难以理解,即使知道了封装的好处,也不知道该如何入手自己封装,跟着老师封装几个,再多看看其他项目里的或是其他大神封装的例子之后,自己也就勉强可以封装几个简单的类了。所谓熟读唐诗三百首,不会作诗也会吟,多看看,多想想,见的多了,自然会有所体会。

    转载请注明原文地址: https://ju.6miu.com/read-697.html

    最新回复(0)