ListView控件功能全解析 您所在的位置:网站首页 listview控件的用法delphi ListView控件功能全解析

ListView控件功能全解析

2023-08-27 14:35| 来源: 网络整理| 查看: 265

ListView是Android手机系统中使用非常频繁的控件,以垂直列表的形式显示数据项,ListView的用法也较为复杂,下面将详细介绍ListView相关的各种用法。

1、创建使用ListView

有2种方式创建ListView

在布局文件中使用ListView创建

在代码中获取到实例后为ListView设置Adapter

listView = (ListView)findViewById(R.id.list); listView.setAdapter(adapter); Activity继承ListActivity

继承ListActivity后,不需要设置布局文件,直接使用setListAdapter()为ListView设置Adapter即可

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

2、自定义ListView的item格式

新建布局文件item.xml,代码如下:

将文字设为居中显示,设置了文本的颜色和大小,构造Adapter时将布局文件传入

ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, datas); listView.setAdapter(adapter);

这里写图片描述

3、设置ListView的点击事件

为ListView的item设置点击事件

listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "Item " + datas.get(position) + " clicked", Toast.LENGTH_LONG).show(); } });

运行程序,点击列表项

这里写图片描述

4、ListView数据改变,更新ListView

修改ListView的点击事件,点击item后删除List中的数据项,数据改变后,页面不会自动刷新,需要调用adapter的notifyDataSetChanged()方法通知列表更新

listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "Item " + datas.get(position) + " deleted", Toast.LENGTH_LONG).show(); datas.remove(position); adapter.notifyDataSetChanged(); } });

运行程序,点击任意列表项

这里写图片描述

5、ListView显示多种类型的item

上面的例子都是显示的一个类型的列表项,只包含一个TextView,有时会需要显示几种不同的item,包含图片、文本、按钮等元素,这就需要为ListView定义几个不同的布局文件,一个布局文件代表一种类型的item

布局文件item1.xml

布局文件item2

布局文件item3

布局文件1中定义了一个ImageView和一个TextView,布局文件2中只有一个TextView,布局文件3中定义了一个TextView和一个CheckBox,下面是MainActivity.java文件

public class MainActivity extends Activity { ListView listView; List datas = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.list); initData(); adapter = new ArrayAdapter(this, R.layout.item, datas); listView.setAdapter(new ListAdapter()); } class ListAdapter extends BaseAdapter { public final int TYPE_1 = 0; public final int TYPE_2 = 1; public final int TYPE_3 = 2; @Override public int getCount() { // TODO Auto-generated method stub return datas.size(); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public Object getItem(int position) { // TODO Auto-generated met hod stub return datas.get(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub int viewType = getItemViewType(position); View view = null; TextView text = null; switch(viewType) { case TYPE_1: view = View.inflate(MainActivity.this, R.layout.item1, null); text = (TextView)view.findViewById(R.id.text1); break; case TYPE_2: view = View.inflate(MainActivity.this, R.layout.item2, null); text = (TextView)view.findViewById(R.id.text2); break; case TYPE_3: view = View.inflate(MainActivity.this, R.layout.item3, null); text = (TextView)view.findViewById(R.id.text3); break; } text.setText(datas.get(position) + ""); return view; } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 3; } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub if(position < 5) { return TYPE_1; } else if(position < 10) { return TYPE_2; } else { return TYPE_3; } } } public void initData() { for(int i = 1; i

在列表底部有一个Button,点击Button可以加载更多条目,向上滑动到底部也会自动加载更多条目,加载时Button隐藏,需要显示一个加载的进度条

底部布局文件

ListView的滑动加载功能需要实现OnScrollListener接口,滑动加载只关注静止时的状态,当ListView滑动到最底部并且可见的条目数等于adapter的数目,自动加载。当加载的条目和最大条目数相等时,移除底部的View,同时在提示用户没有更多数据可以加载了

MainActivity.java

public class MainActivity extends ActionBarActivity { ListView listView; View footerView; Button load; View loadProgress; List datas = new ArrayList(); ArrayAdapter adapter; public final int MAX_NUM = 50; //最大的条目数 int lastVisibleItem; //最后一个可见的item Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.list); footerView = getLayoutInflater().inflate(R.layout.load_more, null); load = (Button)footerView.findViewById(R.id.load); loadProgress = footerView.findViewById(R.id.load_progress); initData(); listView.addFooterView(footerView); //将底部布局添加到ListView中 adapter = new ArrayAdapter(this, R.layout.item, datas); listView.setAdapter(adapter); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub lastVisibleItem = firstVisibleItem + visibleItemCount -1; //数据加载完毕,移除底部View if(totalItemCount == MAX_NUM + 1) { listView.removeFooterView(footerView); Toast.makeText(MainActivity.this, "没有更多数据可加载", Toast.LENGTH_LONG).show(); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub //当滑动状态为静止并且可见条目数目等于adapter的数目时,加载条目 if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && lastVisibleItem == adapter.getCount()) { load.setVisibility(View.GONE); loadProgress.setVisibility(View.VISIBLE); handler.post(new Runnable() { public void run() { loadData(); adapter.notifyDataSetChanged(); load.setVisibility(View.VISIBLE); loadProgress.setVisibility(View.GONE); }; }); } } }); load.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //加载更多数据 } }); } public void loadData() { try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } int count = adapter.getCount(); for(int i = count + 1; i < count + 6; i++) { datas.add(i + ""); } } public void initData() { for(int i = 1; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有