如何在List活动中设置工具栏?

时间:2015-11-22 17:16:37

标签: android android-activity

我想更改目前为止创建的应用,以便实现ListView。我关注this examplethis example。这些例子单独起作用,但不能与我必须对我迄今为止现有的应用程序所做的更改一起使用。

我的avticity_main.xml定义如下:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity" >

    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"/>

    </android.support.design.widget.AppBarLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_grid"

        android:useDefaultMargins="true"
        android:alignmentMode="alignBounds"
        android:columnOrderPreserved="false"

        android:columnCount="4"
        >

        <TextView
            android:text="MainTitle"
            android:textSize="32dip"
            android:layout_columnSpan="4"
            android:layout_gravity="center_horizontal"
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <ListView
            android:id="@+id/list"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
        </ListView>                            
    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

我的主要活动有以下代码:

public class MainActivity extends AppCompatActivity  {
    static final String[] MOBILE_OS =
        new String[] { "Android", "iOS", "WindowsMobile", "Blackberry"};

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

        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ListView list = (ListView) findViewById(R.id.list);
        list.setAdapter(new ListAdapter(this, MOBILE_OS));

代码编译正常,但没有显示列表。

5 个答案:

答案 0 :(得分:7)

ListActivity是一个实现简单<!DOCTYPE html> <html> <head> </head> <body> hello there </body> </html> 的“便利”类。这就是你所能做的一切。那么,那里没有ListView

要实现您的目标,请使用AppCompatActivity或默认Activity

This link提供了有关如何使用新setSupportActionBar(Toolbar)而不是旧ToolBar的精彩教程。

你想要这样的东西:

Layout sample

可以使用此布局示例:

P.S。: ActionBar可以是"@color/primary"之类的任何颜色。

<强> activity_main.xml中

#FF009688

在Java方面:

<强> YourActivity.java

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:id="@+id/toolbar"
        android:background="@color/primary"
        android:elevation="4dp">

    </android.support.v7.widget.Toolbar>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar"
        android:id="@+id/lv"></ListView>

</RelativeLayout>
我的

编辑 This other answer可以向您展示如何创建自定义适配器以在public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); lv = (ListView) findViewById(R.id.lv); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); } // Populate the ListView here... } } 上显示您想要的数据。

第二次修改:使用此布局

ListView

我做了什么?

您的<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity" > <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary"/> </android.support.design.widget.AppBarLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_grid" android:useDefaultMargins="true" android:alignmentMode="alignBounds" android:columnOrderPreserved="false" android:columnCount="4" android:orientation="vertical"> <TextView android:text="MainTitle" android:textSize="32dip" android:layout_columnSpan="4" android:layout_gravity="center_horizontal" android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ListView android:id="@+id/list" android:layout_height="wrap_content" android:layout_width="match_parent"> </ListView> </LinearLayout> </android.support.design.widget.CoordinatorLayout> 缺少XML上的LinearLayout参数,而您的orientation TextView设置为android:layout_height,因此它填满整个布局。我把它改为match_parent,你很高兴。

答案 1 :(得分:3)

setSupportActionBar(工具栏)在ListActivity中不可用。您可以使用AppCompatActivity来获取对listview的引用:  ListView list = findViewById(R.id.list);并使用list.setAdapter(adapter)代替setListAdapter(adapter);

答案 2 :(得分:1)

你不能在ListActivity中这样做。

如果要访问getSupportActionBar(),则需要通过AppCompatActivity扩展您的类。

我的建议:不要使用ListActivty是否要使用ToolBar。创建一个Activity,然后在该Activity中只有ListView。它会工作得很好。

答案 3 :(得分:0)

您可以使用支持库提供的新AppCompatDelegate组件轻松地将工具栏添加到ListActivity。

点击此链接,

How to add Toolbar to an Activity which doesn't extend AppCompatActivity

答案 4 :(得分:0)

<强> OR

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);

// Set an OnMenuItemClickListener to handle menu item clicks
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        // Handle the menu item
        return true;
    }
});

// Inflate a menu to be displayed in the toolbar
toolbar.inflateMenu(R.menu.your_toolbar_menu);

}`