android 基类fragment,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 mInjectPresenters;

private View mLayoutView;

protected abstract @LayoutRes int setLayout();

protected abstract void initViews(@Nullable Bundle savedInstanceState);

protected abstract void initData();

@SuppressWarnings("ConstantConditions")

protected 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;

}

}

---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值