在每个活动上调用工具栏

use*_*977 4 android android-activity android-toolbar

我的应用程序有一个工具栏,应该出现在每个视图上.目前,我在onCreate()每个Activity的方法中执行以下操作:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

这是否需要onCreate()在每个Activity 中的每个方法中完成,还是有更简单的方法?另外,作为一个附带问题,我如何在工具栏中实现一个"后退"功能,如果用户点击它就会引导用户返回一个操作?

Ami*_*pta 18

为.创建一个基类 Activity

public abstract class BaseActivity extends AppCompatActivity {

  Toolbar toolbar;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getLayoutResource());
    configureToolbar();
  }

  protected abstract int getLayoutResource();

  private void configureToolbar() {
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
      setSupportActionBar(toolbar);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case android.R.id.home:
        FragmentManager fm = getSupportFragmentManager();
        if (fm != null && fm.getBackStackEntryCount() > 0) {
          fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        } else {
          finish();
        }
        return true;
      default:
        return super.onOptionsItemSelected(item);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并在每个Activity扩展这个BaseActivity以获得ToolBar和实现后面的功能.

最后不要忘记ToolBar在每个活动中包含layout.

编辑:

getLayoutResource()在每个中重写该方法Activity并传递布局ID.

public class MainActivity extends BaseActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }

  @Override
  public int getLayoutResource() {
    return R.layout.activity_main;
  }
Run Code Online (Sandbox Code Playgroud)