Android ListView与适配器

来源:互联网 发布:程序员可以兼职吗 编辑:程序博客网 时间:2024/06/05 17:57
Android ListView与适配器
效果图

ListView显示列表数据
1.以垂直方式展示一组数据项
2.将数据展示在一个可滚动的列表视图中
3.每一子项数据的格式都相同
ListView的使用
ListView显示数据三元素

ListView使用步骤
1.定义listView组件,创建列表显示界面
2.构造适配器,关联数据源
3.为ListView设置适配器
什么是适配器?
Adapter
1.处理数据并将数据绑定到界面
2.界面与数据之间的桥梁
3.提供数据项的访问及更新
根据列表的适配器类型分为三种,
1.ArrayAdapter
2.SimpleAdapter
3.SimpleCursorAdapter
ArrayAdapter最为简单,只能展示一行字。
SimpleAdapter有最好的扩充性,可以自定义出各种效果。
SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

代码演示
1.首先是布局文件,这里需要两个布局文件,一个是放置列表控件的Activity对应的布局文件 activity_main.xml,另一个是ListView中每一行信息显示所对应的布局listview_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.listview.MainActivity">    <ListView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/listView"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"/></RelativeLayout>

新建一个布局文件listview_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent">    <ImageView        android:layout_width="80dp"        android:layout_height="80dp"        android:id="@+id/imageView"        android:src="@mipmap/ic_launcher"/>    <TextView        android:layout_width="100dp"        android:layout_height="40dp"        android:text="New Text"        android:id="@+id/textView1"        android:layout_alignParentTop="true"        android:layout_toRightOf="@+id/imageView"        android:layout_toEndOf="@+id/imageView"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Text"        android:id="@+id/textView2"        android:layout_below="@+id/textView1"        android:layout_toRightOf="@+id/imageView"        android:layout_toEndOf="@+id/imageView"/></RelativeLayout>

2.在新建一个Main2Activity用于跳转显示,并添加布局文件
package com.example.listview;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class Main2Activity extends AppCompatActivity {    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        //获取上个页面的intent内容        Intent intent=getIntent();        //根据不同的建名,获取相对应的值        int name=intent.getIntExtra("newname",0);        //通过ID寻找textView的位置        tv= (TextView) findViewById(R.id.textView3);        //调用name        tv.setText(String.valueOf(name));    }}

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.listview.Main2Activity">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Text"        android:id="@+id/textView3"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true"/></RelativeLayout>
3.然后就设置MainActivity中的代码了:基本思想就是先将数据添加到ArrayList中
实例化控件
调用initView方法
通过ID找到listView的位置
实例化list集合对象,不能直接实例化所以用子类ArrayList实例化
利用for循环循环显示listview列表
创建一个适配器
把适配器放在列表上去
给listView添加短按监视器
给listView添加长按监视器
跳转页面
将对应的值传入跳转页面,newname为list的一个表示
开始跳转
false会出现短按监视器和长按监视器
true会出现长按监视器
package com.example.listview;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    //实例化控件    private ListView listView;    private List<Integer> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //调用initView方法        initView();    }    private void initView(){        //通过ID找到listView的位置        listView= (ListView) findViewById(R.id.listView);        //实例化list集合对象,不能直接实例化所以用子类ArrayList实例化        list=new ArrayList();        //利用for循环循环显示listview列表        for(int x=0; x<100; x++){            list.add(x);        }        //创建一个适配器        ArrayAdapter adapter=new ArrayAdapter(this,R.layout.listview_main,R.id.textView1,list);        //把适配器放在列表上去        listView.setAdapter(adapter);        //listView添加短按监视器        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {            Toast.makeText(MainActivity.this, "点击了第"+list.get(position)+"个条目", Toast.LENGTH_SHORT).show();        }    });        //listView添加长按监视器        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {                //跳转页面                Intent intent=new Intent(MainActivity.this,Main2Activity.class);                //将对应的值传入跳转页面,newnamelist的一个表示                intent.putExtra("newname",list.get(position).toString());                //开始跳转                startActivity(intent);                //false会出现短按监视器和长按监视器                //true会出现长按监视器                return true;            }        });    }}
1 0