Android笔记——ListView(列表视图)
来源:互联网 发布:域名备案被注销 编辑:程序博客网 时间:2024/06/05 14:18
最近在安卓入门阶段苦苦挣扎,也看了很多入门的书,也一边在看兄弟连云课堂的视频,我觉得视频讲解的是我看过这么多讲解比较好的一个。其实他们讲解也是按照官方API文档来举例子讲解,下面我把这几天学习的内容整理一下,有些地方自己也没懂,欢迎大家指导。
ListView介绍:
列表视图是android中最常用的的一种视图组件,它以垂直列表的方式列出所需要显示的列表项,例如人名单,系统设置等,都用到了ListView组件。
ListView
is a view group that displays a list of scrollable items. The list items are automatically inserted to the list using an Adapter
that pulls content from a source such as an array or database query andconverts each item result into a view that's placed into the list.
例1:
MainActivity.java
package com.example.listview;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnItemClickListener{//实现接口选项单击事件private ListView lv;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) findViewById(R.id.ListView01);//获取组件lv.setOnItemClickListener(this);//注册事件}public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}//ListView的列表下的单击事件public void onItemClick(AdapterView<?> parent, View view, int position, long id) {System.out.println("parent ="+parent.getClass());System.out.println("view ="+view.getClass());TextView tv = (TextView)view;Toast.makeText(this, tv.getText(),Toast.LENGTH_SHORT).show();System.out.println("position ="+position);System.out.println("id ="+id);}}main1.xml
<ListView android:id="@+id/ListView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/names" android:divider="#ffffbb" android:dividerHeight="20dp" android:drawSelectorOnTop="false" android:scrollbars="horizontal|vertical" android:fastScrollEnabled="true" android:listSelector="#00ffff"> </ListView>
strings.xml
<resources> <string name="app_name">ListView</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string><string-array name = "names"> <item >苹果</item> <item >香蕉</item> <item >草莓</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item> <item >芒果</item></string-array></resources>
@这是最基本的通过xml配置实现的一个简单的listview列表,如果当列表数据较多时,会有滚动条出现,通过strings.xml为列表填充内容。
ListActivity
The following example uses ListActivity, which is an activity that includesa ListView as its only layout element by default. It performs a query tothe ContactsProvider for a list of names and phone numbers.
例2:
MainActivity.2
public class MainActivity2 extends ListActivity{protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String[] names = {"水果","蔬菜","粗粮","养生"};//填充数据(适配器)ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);//getListView();setListAdapter(adapter);}}
单选和多选模式
例3:
MainActiity3,java
public class MainActivity3 extends Activity{private ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.layout_main3);lv = (ListView) findViewById(R.id.listView1);String[] citys = {"北京","上海","广州","深圳"};//单选模式//ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,citys);//多选模式ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,citys);//设置为单选模式//lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//多选模式lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);lv.setAdapter(adapter);}}main3.xml
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>效果图:
ListView实现图文列表
例4.
MainActivity4.java
public class MainActivity4 extends Activity{private ListView lv;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout_main4);lv = (ListView) findViewById(R.id.listView1);//一个列表项内容Map<String, Object> item1 = new HashMap<String, Object>();item1.put("image", R.drawable.ic_launcher);item1.put("name", "小熊熊");Map<String, Object> item2 = new HashMap<String, Object>();item2.put("image", R.drawable.ic_launcher);item2.put("name", "小飞飞");List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();data.add(item1);//添加data.add(item2);SimpleAdapter sa = new SimpleAdapter(this,data , R.layout.mian4_item, new String[]{"image","name"}, new int[]{R.id.imageView1,R.id.textView1});lv.setAdapter(sa);}}main4.xml
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>
main4_item.xml
<ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.41" android:text="TextView" />
效果图:
例5.
MainActivity5.java
public class MainActivity5 extends Activity{private ListView lv;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main5);lv = (ListView) findViewById(R.id.listView1);lv.setAdapter(new MyAdapter());}private int[] images = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};private String[] names = {"小白","小黑","小飞","小熊","小花","小美","小明"};//自定义适配器class MyAdapter extends BaseAdapter{//获取列表项的总数public int getCount() {return names.length;}//获取每一个列表项public Object getItem(int position) {return names[position];}//获取每个列表的IDpublic long getItemId(int position) {return position;}//循环调用创建列表项public View getView(int position, View convertView, ViewGroup parent) {//优化提高效率if(convertView == null){//创建viewconvertView = getLayoutInflater().inflate(R.layout.main5_item, null);ViewHolder vh = new ViewHolder();vh.iv = (ImageView) convertView.findViewById(R.id.imageView1);vh.tv = (TextView) convertView.findViewById(R.id.textView1);vh.iv.setImageResource(images[position]);vh.tv.setText(names[position]);convertView.setTag(vh);}else{ViewHolder vh = (ViewHolder) convertView.getTag();}//ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1);//TextView tv = (TextView) convertView.findViewById(R.id.textView1);//iv.setImageResource(images[position]);//tv.setText(names[position]);return convertView;}}static class ViewHolder{ImageView iv;TextView tv;}}
main5_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.41" android:text="TextView" /></LinearLayout>main5.xml
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>
ListView刷新分页
MainActivity6.java
public class MainActivity6 extends Activity implements OnScrollListener{private ListView lv;private ArrayList<News> news = new ArrayList<News>();MyAdapter adapter;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main6);lv = (ListView) findViewById(R.id.listView1);lv.setOnScrollListener(this);//设置底部的视图View footer = getLayoutInflater().inflate(R.layout.load, null);lv.addFooterView(footer);initData();adapter = new MyAdapter();lv.setAdapter(adapter);}int index = 1;//数据计数器(索引)//初始化数据void initData(){for (int i = 0; i < 10; i++) {News n = new News();n.title = "title"+index;n.content = "content"+index;index++;news.add(n);}}//自定义适配器 class MyAdapter extends BaseAdapter{public int getCount() {return news.size();}public Object getItem(int position) {return news.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View converView, ViewGroup parent) {ViewHolder vh = null;if (converView == null) {converView = getLayoutInflater().inflate(R.layout.main6_item, null);vh = new ViewHolder();vh.tvTitle = (TextView) converView.findViewById(R.id.textView1_title);vh.tvContent = (TextView) converView.findViewById(R.id.textView2_content);converView.setTag(vh);}else{vh = (ViewHolder) converView.getTag();}News n = news.get(position);vh.tvTitle.setText(n.title);vh.tvContent.setText(n.content);return converView;}} static class ViewHolder{ TextView tvTitle; TextView tvContent; } int visibleLastIndex = 0;//滚动的最后一个位置 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {visibleLastIndex = firstVisibleItem+visibleItemCount-1;}public void onScrollStateChanged(AbsListView view, int scrollState) {if(visibleLastIndex ==adapter.getCount() && scrollState==OnScrollListener.SCROLL_STATE_IDLE){new LoadDataTread().start();}}//线程之间通信的桥梁private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:adapter.notifyDataSetChanged();break;default:break;}}};//模拟加载数据class LoadDataTread extends Thread{public void run() {initData();try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}//通过handler处理器去通知主线程,说数据已加载完毕handler.sendEmptyMessage(1);}}}News.java
package com.example.listview;/* * 新闻 */public class News {String title;String content;}
main6.xml
<ListView android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView>main6_item.xml
<TextView android:id="@+id/textView1_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView2_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" />load.xml
<ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载..." />效果如图:
- Android笔记——ListView(列表视图)
- Android ListView 列表视图
- Android ListView 列表视图
- Android组件之ListView(列表视图)
- 列表视图(ListView)
- Android学习笔记二十三之ListView列表视图一
- Android学习笔记二十四之ListView列表视图二
- Android学习笔记二十三之ListView列表视图一
- Android学习笔记二十四之ListView列表视图二
- android 列表视图 ListView详解
- Android练习-----列表视图(ListView)(使用ListView控件创建列表视图)
- 列表视图(ListView)——SimpleAdapter
- 列表视图(ListView)——BaseAdapter
- 【17】ListView——列表视图
- Android练习-----列表视图(ListView)(通过继承ListActivity实现列表视图)
- android学习--视图列表(ListView和ListActivity)
- android 列表视图组件 ListView 详解
- Android列表视图(ListView--ArrayAdapter)学习
- eclipse+maven3+jUnit4+spring如何测试的同时进行debug
- 三角形攻击区域
- Python写自动化之Ftp上传下载
- Zendstudio+Eclipse快捷键大全
- Space Golf (二分答案)
- Android笔记——ListView(列表视图)
- 学习OpenCV_例2.6 例2.7 进行放缩处理并在放缩后的图像中寻找边缘
- MySQL数据库常用操作
- RFID作业1-1
- HDU1285_拓扑排序
- C++ 中的this指针
- dede常用语法笔记
- UVA - 10404 Bachet's Game 博弈
- leetcode 日经贴,python code -Decode Ways