|
本帖最后由 liu 于 2018-12-12 10:09 编辑
ListView
ListView是一个以垂直方式在项目中显示View视图的列表
常用的属性有:
android:divider 设置两条数据间的间隔样式
android:dividerHeight 设置两条数据间的间
android:footerDividersEnabled 设置列表尾部是否显示分割线
android:headerDividersEnabled 设置列表头部是否显示分割线
显示一个简单的列表需要ListView、数据源和适配器,接下来先说下适配器:
适配器是数据和视图之间的桥梁,通过适配器我们可以将数据显示在列表上,常用的适配器有:BaseAdapter,ArrayAdapter,SimpleAdapter,本篇先用ArrayAdapter(数组适配器)来实现ListView列表,另外两个下个帖子单独介绍。
activity_main.xml:
[XML] 纯文本查看 复制代码 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
MainActivity:
[Java] 纯文本查看 复制代码 package com.example.asus.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private String[] data = {"开封", "北京", "上海", "广州", "杭州", "苏州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listview = (ListView) findViewById(R.id.lv);
//初始化适配器 第一个参数:上下文对象 第二个参数:每条数据显示的布局 第三个参数:数据源
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);
listview.setAdapter(adapter);
}
}
效果图:
ListView点击事件(OnItemClickListener)
[Java] 纯文本查看 复制代码 package com.example.asus.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private String[] data = {"开封", "北京", "上海", "广州", "杭州", "苏州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listview = (ListView) findViewById(R.id.lv);
//初始化适配器 第一个参数:上下文对象 第二个参数:每条数据显示的布局 第三个参数:数据源
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);
listview.setAdapter(adapter);
//点击事件
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**
*
* @param adapterView 用户所点击的AdapterView
* @param view 当前点击的列表项所对应的布局View对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作
* @param i 当前点击的列表项的位置,从0开始
* @param l 当前点击的列表项的序号,从0开始
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "点击了" + data, Toast.LENGTH_SHORT).show();
}
});
}
}
效果图:
ListView长按事件(setOnItemLongClickListener)
[Java] 纯文本查看 复制代码 package com.example.asus.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private String[] data = {"开封", "北京", "上海", "广州", "杭州", "苏州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listview = (ListView) findViewById(R.id.lv);
//初始化适配器 第一个参数:上下文对象 第二个参数:每条数据显示的布局 第三个参数:数据源
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);
listview.setAdapter(adapter);
//点击事件
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**
*
* @param adapterView 用户所点击的AdapterView
* @param view 当前点击的列表项所对应的布局View对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作
* @param i 当前点击的列表项的位置,从0开始
* @param l 当前点击的列表项的序号,从0开始
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "点击了" + data, Toast.LENGTH_SHORT).show();
}
});
//长按事件
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
/**
*
* @param adapterView 用户所长按的AdapterView
* @param view 当前长按的列表项所对应的布局View对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作
* @param i 当前长按的列表项的位置,从0开始
* @param l 当前长按的列表项的序号,从0开始
* return 返回true时,不再执行点击事件,返回false时,执行完长按时间后会执行click点击事件
*/
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "长按了" + data, Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
return值为fasle时:
可以看到执行完长按事件后又执行了一次点击事件
接下来把return的值改为true看下效果:
可以看到执行完长按事件后不再执行点击事件
|
|