美文网首页
基类(带顶部标题的)

基类(带顶部标题的)

作者: 谜之龙 | 来源:发表于2017-04-26 15:49 被阅读0次

    Activity的基类
    代码中我写:可以没有的 ,代表上面的红框,一般不需要,也可不写,写上也没关系
    把其对应的布局设置为空白;

    ![0YEDW1A{WNK7({CO5@)2]1O.png](https://img.haomeiwen.com/i5710864/1e50905184f70917.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    public abstract class BaseActivity extends AppCompatActivity {
    /**
     * ActionBar上的标题
     */
    private TextView mTitle;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
        super.setContentView(R.layout.layout_root);
        setContentView(getContentView()); //当没有是()里为getLayoutId
        initActionBar(isShowActionBar());
        initView();
        initData();
        setListaner();
    }
    //***************可以没有***************************
    /**
     * 初始化Actionbar
     *
     * @param showActionBar :是否显示ActionBar
     */
    private void initActionBar(boolean showActionBar) {
        RelativeLayout mActionBar = getViewById(R.id.relay_root_actionbar);
        if (showActionBar) {
            mTitle = getViewById(R.id.tv_root_title);
            ImageView image = getViewById(R.id.img_root_title);
            image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();//返回上一界面
                }
            });
        } else {//不显示
            mActionBar.setVisibility(View.GONE);
        }
    
    }
    
    //***************可以没有***************************
    /**
     * 是否显示ActionBar
     *
     * @return true:表示显示
     */
    protected abstract boolean isShowActionBar();
    //***************可以也没有***************************
    private View getContentView() {
        LinearLayout mRoot = getViewById(R.id.lin_root);
        //将子类的布局解析成View
        View subView = LayoutInflater.from(this).inflate(getLayoutId(), null);
        //设置大小
        subView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));
        mRoot.addView(subView);
        return mRoot;
    }
    
    protected void init() {
    
    }
    
    /**
     * 设置监听
     */
    protected void setListaner() {
    
    }
    
    /**
     * 初始化数据
     */
    protected abstract void initData();
    
    /**
     * 初始化视图
     */
    protected abstract void initView();
    
    /**
     * 设置布局ID
     *
     * @return
     */
    protected abstract int getLayoutId();
    
    /**
     * 以Toast的方式显示文本信息
     *
     * @param text
     */
    protected void showToast(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }
    
    /**
     * 启动一个activty
     *
     * @param cls
     */
    protected void openActivity(Class<? extends BaseActivity> cls) {
        startActivity(new Intent(this, cls));
    }
    
    /**
     * 启动activity
     *
     * @param cls
     * @param isFinish :是否关闭当前的Activity
     */
    protected void openActivity(Class<? extends BaseActivity> cls, boolean isFinish) {
        startActivity(new Intent(this, cls));
        if (isFinish) finish();
    }
    
    /**
     * 通过ViewID找View
     *
     * @param viewId
     * @param <T>
     * @return
     */
    protected <T extends View> T getViewById(@IdRes int viewId) {
        return (T) findViewById(viewId);
    }
    //***************可以没有***************************
    /**
     * 设置标题
     *
     * @param text
     */
    protected void setTitle(String text) {
        mTitle.setText(text);
    }
    }
    

    新建个App类,用于承接上下文的(记住APP这个类必须要在清单文件中注册)

    记住APP这个类必须要在清单文件中注册
    public class App extends Application{
    public static App appContext;
    
    @Override
    public void onCreate() {
        super.onCreate();
        appContext = this;
    }
    

    }

    相关文章

      网友评论

          本文标题:基类(带顶部标题的)

          本文链接:https://www.haomeiwen.com/subject/dawizttx.html