在使用ListView控件显示数据时,有两种实现方式:
- 在xml文件中定义listview控件,设置相关属性,然后再Activity当中对其进行配置和事件监听
- 让你的Activity继承ListActivity,通过getListView()来获取,这时可以不写ListView的xml文件。
我们在ListView中显示的数据都是通过ListAdapter这个接口配置的,通常是使用它的某个子类适配器进行数据适配,其中用的最多的就是ArrayAdapter(存储数组)、SimpleAdapter(字符串)、CursorAdapter(数据库中的数据)。
我们可以使用默认的full-screen list,但很多时候我们需要做一些扩充。这时我们就需要定制layout,比如加上一个Button,这时我们就需要将ListView的id设置为”@android:id/list”。因为我们继承ListActivity这个类时,通过getListView()获取ListView对象。而系统在执行此方法时是按照id=list去找的,所以id必须定义为”@android:id/list”。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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" app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false"
></ListView>
</LinearLayout>
ListActivity.java
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
/**
* Created by Administrator on 2015/10/15.
*/
public class ListActivity extends android.app.ListActivity implements AdapterView.OnItemClickListener{
String items[] = {"One","Two","Three","Four","Five"};
private Button button;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
ListView listView = getListView();
listView.setOnItemClickListener(this);
listView.setTextFilterEnabled(true);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(ListActivity.this,items[i],Toast.LENGTH_SHORT).show();
}
}
或者当我们只想单纯的显示List,而不需要添加更多的控件时就不需要在代码中setContentView()。
通过在string.xml中配置多个国家的名字
<resources>
<string name="app_name">ListActivity</string>
<string name="action_settings">Settings</string>
<string-array name="countries_array">
<item>Bahrain</item>
<item>Bangladesh</item>
<item>Barbados</item>
<item>Belarus</item>
<item>Belgium</item>
<item>Belize</item>
<item>Benin</item>
<item>Bermuda</item>
<item>Bhutan</item>
<item>Bolivia</item>
<item>Bosnia and Herzegovina</item>
<item>Botswana</item>
<item>Bouvet Island</item>
<item>Brazil</item>
</string-array>
</resources>
ListActivity.java
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
/**
* Created by Administrator on 2015/10/15.
*/
public class ListActivity extends android.app.ListActivity implements AdapterView.OnItemClickListener{
String[] countries;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*
setContentView(R.layout.activity_main);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
ListView listView = getListView();
listView.setOnItemClickListener(this);
listView.setTextFilterEnabled(true);
*/
countries = getResources().getStringArray(R.array.countries_array);
setListAdapter(new ArrayAdapter<String>(ListActivity.this,R.layout.list_item,countries));
ListView listView = getListView();
listView.setOnItemClickListener(this);
listView.setTextFilterEnabled(true);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(ListActivity.this,countries[i],Toast.LENGTH_SHORT).show();
}
}
子项布局文件
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textSize="16sp"
xmlns:android="http://schemas.android.com/apk/res/android" />