Android如何在ListActivity中使用Toolbar?

Android how to use Toolbar in ListActivity?

我做了一个ListActivity:

 public class NoteListActivity extends ListActivity{
 }

并且以下方法不再可用:

    setSupportActionBar(toolbar);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

但我可以使用:

    setActionBar(toolbar);
    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setDisplayHomeAsUpEnabled(true);

请注意,我在同一项目的其他活动中使用了支持库。这意味着我添加了正确的 gradle 依赖项。

如何使用 ListActivity 和 android.support.v7.widget.Toolbar?

您不能在 ListActivity 中这样做。

如果您想访问 getSupportActionBar(),您需要将 class 扩展为 AppCompatActivity

我的建议:不要用ListActivty,因为你想用ToolBar。创建一个 Activity,然后在 Activity 中只有 ListView。它会工作得很好。

AppCompatActivity 是支持 v4 的 FragmentActivity 的直接子 class。阅读这篇文章

http://android-developers.blogspot.it/2015/04/android-support-library-221.html so for your requirement, public class NoteListActivity extends AppCompatActivity {...}

只需更改您的依赖项,例如:

compile "com.android.support:appcompat-v7:22.1.0"
     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AppCompatCallback callback = new AppCompatCallback() {
        @Override
        public void onSupportActionModeStarted(ActionMode actionMode) {
        }

        @Override
        public void onSupportActionModeFinished(ActionMode actionMode) {
        }

        @Nullable
        @Override
        public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
            return null;
        }
    };

    AppCompatDelegate delegate = AppCompatDelegate.create(this, callback);

    delegate.onCreate(savedInstanceState);
    delegate.setContentView(R.layout.saved_report_activity);

    Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar);
    delegate.setSupportActionBar(toolbar);
    delegate.getSupportActionBar().setDisplayShowHomeEnabled(true);

    toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            NavUtils.navigateUpFromSameTask(SavedReportActivity.this);
        }
    });

我能够通过添加支持库工具栏样式然后将样式添加到清单中的列表 activity 来解决这个问题。

在styles.xml中:

     <style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">

在清单中

    <activity android:theme="@style/FullscreenActionBarStyle"
              android:name="@string/my_activity_name"
              android:label="@string/my_activity_label"/>

这应该会在您的 activity 中添加一个工具栏,您可以在其中添加项目和处理事件等等...