BaseFragment 基类
Posted ly570
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BaseFragment 基类相关的知识,希望对你有一定的参考价值。
package com.test.mvp.mvpdemo.mvp.v6.basemvp;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.test.mvp.mvpdemo.mvp.v6.inject.InjectPresenter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseFragment extends Fragment implements IBaseView
private List<BasePresenter> mInjectPresenters;
private View mLayoutView;
protected abstract @LayoutRes int setLayout();
protected abstract void initViews(@Nullable Bundle savedInstanceState);
protected abstract void initData();
@SuppressWarnings("ConstantConditions")
protected <T extends View> T $(@IdRes int viewId)
return this.getView().findViewById(viewId);
@SuppressWarnings("unchecked", "TryWithIdenticalCatches")
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
View view = inflater.inflate(setLayout(), container, false);
mInjectPresenters = new ArrayList<>();
//获得已经申明的变量,包括私有的
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields)
//获取变量上面的注解类型
InjectPresenter injectPresenter = field.getAnnotation(InjectPresenter.class);
if (injectPresenter != null)
try
Class<? extends BasePresenter> type = (Class<? extends BasePresenter>) field.getType();
BasePresenter mInjectPresenter = type.newInstance();
//绑定
mInjectPresenter.attach(this);
field.setAccessible(true);
field.set(this, mInjectPresenter);
mInjectPresenters.add(mInjectPresenter);
catch (IllegalAccessException e)
e.printStackTrace();
catch (java.lang.InstantiationException e)
e.printStackTrace();
catch (ClassCastException e)
e.printStackTrace();
throw new RuntimeException("SubClass must extends Class:BasePresenter");
return view;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
initViews(savedInstanceState);
initData();
@Override
public void onDestroy()
super.onDestroy();
for (BasePresenter presenter : mInjectPresenters)
presenter.detach();
mInjectPresenters.clear();
mInjectPresenters = null;
---------------------
以上是关于BaseFragment 基类的主要内容,如果未能解决你的问题,请参考以下文章