0

假设我有5个不同的Activity但这5个activity底部的布局、功能都是一样(其他布局不一样例如toolBar),我想问一下如何才能让这个相同的布局只写在基类Activity中然后其他Activity继承这个BaseActivity,从而实现只写一个地方的代码而其他Activity中不用在写相同的代码。
ps:如果这个方式无法实现,请问有其他方法没有。

3个回答

1

已采纳

你可以看下这篇,看下别人的做法,希望对你有所启发:http://www.jianshu.com/p/5bab...

0

https://segmentfault.com/q/10...
你这个问题跟上面那个问题,应该问的异曲同工,你参考下。

0

首先我们定义一个Boolean 变量 用于控制共有部分是否显示,并添加方法如下:

 private boolean isShowCommonView = true;

  public void setShowCommonView(boolean isShow) {
        isShowCommonView = isShow;
    }

然后我们复写BaseActivity中的setContentView:如下

 @Override
    public void setContentView(@LayoutRes int layoutResID) {
        super.setContentView(layoutResID);
        if (isShowBottom) {
            ViewGroup mDecorView = (ViewGroup) getWindow().getDecorView();
            //获得DecorView视图层次中的FrameLayout
            //这个地方不清楚的可以看一下Activity的视图层次图就明白了
            mContentRootView = (FrameLayout) ((ViewGroup) mDecorView.getChildAt(0)).getChildAt(1);
            mBottomView = LayoutInflater.from(getBaseContext()).inflate(R.layout.ac_main_play_view, null);
            FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.gravity = Gravity.BOTTOM;
            mContentRootView.addView(mBottomView, layoutParams);
           //下面就是根据mBottomView.findViewById()来进行一些视图的初始化工作
           //如设置监听器等 
        }
    }

最后我们在其他继承了BaseActivity的子类的onCreate()中一定要在super.onCreate()前调用开始定义的方法setShowCommonView(Boolean)来控制共有部分是否显示。如下

//子类的生命周期函数:onCreate(Bundle)
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //显示底部视图 true为显示 false 为隐藏
        setShowBottom(true);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainplay);
        ButterKnife.bind(this);
        initview();
        //其他的工作。。。
    }

撰写答案