ViewBinding的封装使用

在build中添加
android{
...
 viewBinding {
        enabled = true
    }
...
}
BaseActivity的代码如下
public abstract class BaseActivity< T extends ViewBinding> extends AppCompatActivity implements Contract.IView {

    private LoadDialog mLoadingDialog;
    public BasePresenter mPresenter;
    private Unbinder bind;
    private View rootView;
    protected T binding;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        if (setLayoutResource() != 0) {
            setStatusBar();
            mLoadingDialog = new LoadDialog(this);
            mLoadingDialog.setCancelable(false);
            Type type = getClass().getGenericSuperclass();
            if (type instanceof ParameterizedType) {
                try {
                    Class<T> clazz = (Class<T>) ((ParameterizedType) type).getActualTypeArguments()[0];
                    Method method = clazz.getMethod("inflate", LayoutInflater.class);
                    binding = (T) method.invoke(null, getLayoutInflater());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                setContentView(binding.getRoot());
            }

            mPresenter = new PresenterImpl();
            if (mPresenter != null) {
                mPresenter.attach(this);
            }
//            bind = ButterKnife.bind(this);
            initView();
        }
    }

    protected abstract int setLayoutResource();

    protected void setStatusBar() {
        StatusBarUtil.setTransparentForImageView(this, null);
    }


    protected abstract void initView();


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mPresenter != null) {
            mPresenter.onEnd();
        }
        if (mLoadingDialog != null) {
            mLoadingDialog.dismiss();
            mLoadingDialog = null;
        }
        if (bind != null) {
            bind.unbind();
        }
    }

    @Override
    public void showLoading() {
        if (!mLoadingDialog.isShowing()) {
            mLoadingDialog.show();
        }
    }

    @Override
    public void hideShowing() {
        if (mLoadingDialog.isShowing()) {
            mLoadingDialog.dismiss();
        }
    }

    @Override
    public void finish() {
        super.finish();
    }

}
activity中的使用
public class LjzActivity extends BaseActivity<ActivityLjzBinding> {
//    @BindView(R.id.viewpager)
//    ViewPager viewPager;
//    @BindView(R.id.tablayout)
//    XTabLayout tabLayout;

    private List<Fragment> fragments = new ArrayList<>();
    private List<String> titles = new ArrayList<>();

    @Override
    protected int setLayoutResource() {
        return R.layout.activity_ljz;
    }

    @Override
    protected void initView() {
        titles.add("tab1");
        titles.add("tab2");
        titles.add("tab3");
        titles.add("tab4");
        fragments.add(new LjzLazyFragment1());
        fragments.add(new LjzLazyFragment2());
        fragments.add(new LjzLazyFragment3());
        fragments.add(new LjzLazyFragment4());
        binding.viewpager.setAdapter(new BaseViewPagerAdapter(getSupportFragmentManager(), 
    FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, fragments, titles));
        binding.tablayout.setupWithViewPager(binding.viewpager);
        binding.viewpager.setCurrentItem(0);
//        viewPager.setOffscreenPageLimit(3);
    }

    @Override
    public void onSuccess(Object o) {

    }

    @Override
    public void onError(String error) {

    }


}

BaseFragment的代码如下
  public BasePresenter mPresenter;
    private Unbinder bind;
    private LoadDialog loadDialog;
    private View view;
    private boolean isFirstLoad = true; // 是否第一次加载
    protected T binding;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //透明状态栏
            getActivity().getWindow().addFlags(WindowManager.LayoutParams.CONTENTS_FILE_DESCRIPTOR);
        }

//        view = inflater.inflate(Layout(), container, false);
//        bind = ButterKnife.bind(this, view);
        Type type = getClass().getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            try {
                Class<T> clazz = (Class<T>) ((ParameterizedType) type).getActualTypeArguments()[0];
                Method method = clazz.getMethod("inflate", LayoutInflater.class);
                binding = (T) method.invoke(null, getLayoutInflater());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        loadDialog = new LoadDialog(getActivity());
        loadDialog.setCancelable(false);
        initView(savedInstanceState);

        return binding.getRoot();
    }

    @Override
    public void onResume() {
        super.onResume();
        if (isFirstLoad){
            initData();
//            isFirstLoad = false;
        }
    }

    protected abstract void initData();



    protected abstract void initView(Bundle savedInstanceState);


    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mPresenter != null) {
            mPresenter.onEnd();
        }
    }



freagment中的使用
public class LjzLazyFragment4 extends BaseLazyFragment<FragmentLjz4Binding> {
    @BindView(R.id.text)
    TextView textView;
    @BindView(R.id.recyclerview)
    RecyclerView recyclerView;
    @BindView(R.id.smart)
    SmartRefreshLayout smartRefreshLayout;
    private List<String> data = new ArrayList<>();

    @Override
    protected void initData() {
        LogUtils.error("fragment3");
        binding.refreshload.smart.autoRefresh();
    }


//    @Override
//    protected int Layout() {
//        return R.layout.fragment_ljz1;
//    }

    @Override
    protected void initView(Bundle savedInstanceState) {

        for (int i = 0; i < 20; i++) {
            data.add(i + "");
        }
        binding.refreshload.recyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));

        MyAdapter myAdapter = new MyAdapter(R.layout.activity_recycler_item, data);
        binding.refreshload.recyclerview.setAdapter(myAdapter);

        //条目点击事件
        myAdapter.setOnItemClickListener((adapter, view, position) -> ToastUtils.showToast("条目点击事件"));
        binding.refreshload.smart.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshLayout) {
                binding.refreshload.smart.finishLoadMore();
            }

            @Override
            public void onRefresh(RefreshLayout refreshLayout) {
                binding.refreshload.smart.finishRefresh();

            }
        });

    }
}

popupwindow中的使用 :布局写了之后,如果找不到PopupItemBinding,需要编译一下项目
  public void showPopup(View view) {
        lightoff();
        //以前使用的
//        View popupView = View.inflate(this, R.layout.popup_item, null);


        //viewbinding使用
        PopupItemBinding popupItemBinding = PopupItemBinding.inflate(LayoutInflater.from(this));
        
        
        PopupWindow popupWindow = new PopupWindow(popupItemBinding.getRoot(), WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.WRAP_CONTENT);
        popupWindow.setOnDismissListener(() -> lighton());

        popupItemBinding.textview.setText("popupwindow");

        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setFocusable(true);

        popupWindow.setOutsideTouchable(true);

        TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0,
                Animation.RELATIVE_TO_PARENT, 1, Animation.RELATIVE_TO_PARENT, 0);
        animation.setInterpolator(new AccelerateInterpolator());
        animation.setDuration(100);

        if (popupWindow.isShowing()) {
            popupWindow.dismiss();
            lighton();
        }
        popupItemBinding.getRoot().startAnimation(animation);
        popupWindow.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);


    }

    /**
     * 设置手机屏幕亮度变暗
     */
    public void lightoff() {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.alpha = 0.3f;
        getWindow().setAttributes(lp);
    }

    /**
     * 设置手机屏幕亮度显示正常
     */
    public void lighton() {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.alpha = 1f;
        getWindow().setAttributes(lp);
    }
include中的使用,需要加入一个id
    <include layout="@layout/common_title"
        android:id="@+id/commontitle"/>
   binding.commontitle.title.setText("列表");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容