package com.example.jingbin.cloudreader.base; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.example.jingbin.cloudreader.R; import com.example.jingbin.cloudreader.databinding.ActivityBaseBinding; import com.example.jingbin.cloudreader.utils.CommonUtils; import com.example.jingbin.cloudreader.utils.PerfectClickListener; import com.example.jingbin.cloudreader.view.statusbar.StatusBarUtil; import rx.Subscription; import rx.subscriptions.CompositeSubscription; /** * Created by jingbin on 16/12/10. */ public class BaseActivity<SV extends ViewDataBinding> extends AppCompatActivity { // 布局view protected SV bindingView; private LinearLayout llProgressBar; private View refresh; private ActivityBaseBinding mBaseBinding; private AnimationDrawable mAnimationDrawable; private CompositeSubscription mCompositeSubscription; protected <T extends View> T getView(int id) { return (T) findViewById(id); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void setContentView(@LayoutRes int layoutResID) { mBaseBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_base, null, false); bindingView = DataBindingUtil.inflate(getLayoutInflater(), layoutResID, null, false); // content RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); bindingView.getRoot().setLayoutParams(params); RelativeLayout mContainer = (RelativeLayout) mBaseBinding.getRoot().findViewById(R.id.container); mContainer.addView(bindingView.getRoot()); getWindow().setContentView(mBaseBinding.getRoot()); // 设置透明状态栏 StatusBarUtil.setColor(this, CommonUtils.getColor(R.color.colorTheme),0); llProgressBar = getView(R.id.ll_progress_bar); refresh = getView(R.id.ll_error_refresh); ImageView img = getView(R.id.img_progress); // 加载动画 mAnimationDrawable = (AnimationDrawable) img.getDrawable(); // 默认进入页面就开启动画 if (!mAnimationDrawable.isRunning()) { mAnimationDrawable.start(); } setToolBar(); // 点击加载失败布局 refresh.setOnClickListener(new PerfectClickListener() { @Override protected void onNoDoubleClick(View v) { showLoading(); onRefresh(); } }); bindingView.getRoot().setVisibility(View.GONE); } /** * 设置titlebar */ protected void setToolBar() { setSupportActionBar(mBaseBinding.toolBar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { //去除默认Title显示 actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.icon_back); } mBaseBinding.toolBar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } public void setTitle(CharSequence text) { mBaseBinding.toolBar.setTitle(text); } protected void showLoading() { if (llProgressBar.getVisibility() != View.VISIBLE) { llProgressBar.setVisibility(View.VISIBLE); } // 开始动画 if (!mAnimationDrawable.isRunning()) { mAnimationDrawable.start(); } if (bindingView.getRoot().getVisibility() != View.GONE) { bindingView.getRoot().setVisibility(View.GONE); } if (refresh.getVisibility() != View.GONE) { refresh.setVisibility(View.GONE); } } protected void showContentView() { if (llProgressBar.getVisibility() != View.GONE) { llProgressBar.setVisibility(View.GONE); } // 停止动画 if (mAnimationDrawable.isRunning()) { mAnimationDrawable.stop(); } if (refresh.getVisibility() != View.GONE) { refresh.setVisibility(View.GONE); } if (bindingView.getRoot().getVisibility() != View.VISIBLE) { bindingView.getRoot().setVisibility(View.VISIBLE); } } protected void showError() { if (llProgressBar.getVisibility() != View.GONE) { llProgressBar.setVisibility(View.GONE); } // 停止动画 if (mAnimationDrawable.isRunning()) { mAnimationDrawable.stop(); } if (refresh.getVisibility() != View.VISIBLE) { refresh.setVisibility(View.VISIBLE); } if (bindingView.getRoot().getVisibility() != View.GONE) { bindingView.getRoot().setVisibility(View.GONE); } } /** * 失败后点击刷新 */ protected void onRefresh() { } public void addSubscription(Subscription s) { if (this.mCompositeSubscription == null) { this.mCompositeSubscription = new CompositeSubscription(); } this.mCompositeSubscription.add(s); } @Override public void onDestroy() { super.onDestroy(); if (this.mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions()) { this.mCompositeSubscription.unsubscribe(); } } public void removeSubscription() { if (this.mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions()) { this.mCompositeSubscription.unsubscribe(); } } }