Android如何在ListActivity中使用工具栏?

5
我创建了一个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?
4个回答

5
     @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);
        }
    });

5

ListActivity中你无法这样做。

如果你想要访问getSupportActionBar(),你需要用AppCompatActivity扩展你的类。

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


1

0
我通过添加支持库工具栏样式并将该样式添加到清单中的列表活动中来解决了这个问题。
在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"/>

这将为您的活动添加一个工具栏,您可以向其中添加项目并处理事件等...


是的,actionBar已经过时了,你不应该使用ListActivity,但为了平稳迁移遗留应用程序,这段代码可以运行。 - Mo Zaatar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接