一、基于Activity
在的其他Activity
只要继承于这个BaseActivity
,实现抽象方法会实现返回操作,可以根据自己的需求把initBaseView里面的设置title和回退按钮的逻辑分离出来,比较更加通用一些。
public abstract class BaseActivity extends AppCompatActivity {
/**
* 输入toolbar的id,和文本内容
*/
public void initBaseView(int id,String title)
{
Toolbar commonToolBar = (Toolbar)findViewById(id);
TextView commonTitle=(TextView)findViewById(R.id.setting_title);
commonTitle.setText(title);
setSupportActionBar(commonToolBar);
setBackArrow();
}
/**
* 设置左上角back按钮
*/
public void setBackArrow() {
final Drawable upArrow = getResources().getDrawable(R.drawable.icon_back_left);
//给ToolBar设置左侧的图标
getSupportActionBar().setHomeAsUpIndicator(upArrow);
// 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置actionBar的标题是否显示,对应ActionBar.DISPLAY_SHOW_TITLE。
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
/**
* 点击左上角的返回按钮,结束本Activity
* home就是左上角的小箭头,在toolbar上
*
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
basefinish();
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* 抽象方法,用于结束activity
*/
public abstract void basefinish();
@Override
public void onBackPressed() {
basefinish();
}
}
二、基于Fragment
这个需要注意的是onViewCreated里面进行了相关初始化,在继承这个BaseFragment 的子类想要调用方法必须onViewCreated或者这个方法之后,这个方法在Fragment的生命周期中是onCreateView之后执行做相关的初始化操作
public class BaseFragment extends Fragment {
/**
* 通用的ToolBar标题
*/
private TextView commonTitle;
/**
* 通用的ToolBar
*/
private Toolbar commonToolBar;
public Activity mActivity;
private AppCompatActivity mAppCompatActivity;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mActivity = getActivity();
mAppCompatActivity=(AppCompatActivity)mActivity;
}
public void initBaseView(View view,int id,String title)
{
commonToolBar = (Toolbar)view.findViewById(id);
commonTitle=(TextView)view.findViewById(R.id.setting_title);
mAppCompatActivity.setSupportActionBar(commonToolBar);
commonTitle.setText(title);
setBackArrow();
}
/**
* 设置左上角back按钮
*/
public void setBackArrow() {
final Drawable upArrow = getResources().getDrawable(R.drawable.icon_back_left);
//给ToolBar设置左侧的图标
mAppCompatActivity.getSupportActionBar().setHomeAsUpIndicator(upArrow);
// 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
mAppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置actionBar的标题是否显示,对应ActionBar.DISPLAY_SHOW_TITLE。
mAppCompatActivity.getSupportActionBar().setDisplayShowTitleEnabled(false);
}
}
还需要注意的就是菜单按钮的创建和Activity不同:
Activity是需要返回值的 public boolean onOptionsItemSelected(MenuItem item) 方法,
Fragment是需要提前设置setHasOptionsMenu(true),同时是 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 一个void方法。