Android中ListView控件数据显示及其子项点击事件

1.activity_main.xml文件中布局ListView控件

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.t20.listview.MainActivity" >
	
    <!-- 显示数据 -->
    <Button
        android:id="@+id/btnShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="显示数据"
        android:onClick="show" />
	
    <ListView
        android:id="@+id/lvShow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/btnShow" >
    </ListView>

</RelativeLayout>

2.创建ListView控件中要显示数据对应的实体类,News.java文件中

package com.t20.entity;

import java.io.Serializable;

public class News implements Serializable {
	private Integer id;//编号
	private String name;//名字
	private Integer age;//年龄
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public News(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public News() {
		super();
	}
	
	
}

3.完成ListView子项布局,list_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="match_parent"
    android:orientation="horizontal" 
    android:weightSum="3">

    <TextView
        android:id="@+id/tvId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="编号" 
        android:layout_weight="1"/>

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/tvAge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="年龄"
        android:layout_weight="1" />

</LinearLayout>

4.MainActivity.java中自定义适配器,将list_item布局加载到ListView控件中实现数据的显示,并完成子项的点击事件

package com.t20.listview;

import java.util.ArrayList;
import java.util.List;

import com.t.listview.R;
import com.t20.entity.News;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemClickListener {
	private ListView lvShow;
	private List<News> newsList;
	private MyAdapator myAdapator;//适配器
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//获取控件
		lvShow=(ListView) findViewById(R.id.lvShow);
		
		//给ListView绑定子项点击事件
		lvShow.setOnItemClickListener(this);
		
		
		//初始化数据
		News news1=new News(1, "张三", 20);
		News news2=new News(2, "李四", 23);
		News news3=new News(3, "王五", 24);
		
		newsList=new ArrayList<News>();
		
		//将初始化的对象加入到集合中
		newsList.add(news1);
		newsList.add(news2);
		newsList.add(news3);
				
	}
	
	/**
	 * 显示数据
	 */
	public void show(View v){
		//定义一个适配器对象,要写在集合定义完成后
		myAdapator=new MyAdapator();
		lvShow.setAdapter(myAdapator);
	}
	
	
	/**
	 * 自定义的适配器
	 * @author Administrator
	 *
	 */
	class MyAdapator extends BaseAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return newsList.size();//返回数据的数量(集合的大小)
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View v, ViewGroup parent) {
			//将list_item布局放到ListView中
			v=View.inflate(MainActivity.this, R.layout.list_item, null);
			
			//获取到要显示数据的控件,控件在list_item中
			TextView tvId=(TextView) v.findViewById(R.id.tvId);
			TextView tvName=(TextView) v.findViewById(R.id.tvName);
			TextView tvAge=(TextView) v.findViewById(R.id.tvAge);
			
			//显示相应的数据
			tvId.setText(newsList.get(position).getId()+"");
			tvName.setText(newsList.get(position).getName()+"");
			tvAge.setText(newsList.get(position).getAge()+"");
			
			return v;
		}
		
	}

	/**
	 * ListView子项点击事件
	 */
	@Override
	public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
		//获得所点击子项的数据
		String id1=newsList.get(position).getId()+"";	
		String name=newsList.get(position).getName();
		String age=newsList.get(position).getAge()+"";
		
		String ret="当前所点击的子项信息为:\n编号:"+id1+"\n姓名:"+name+"\n年龄:"+age;
		
		//进行显示
		Toast.makeText(MainActivity.this, ret, Toast.LENGTH_SHORT).show();
		
	}
	
}




  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AndroidListView刷新数据可以通过以下步骤实现: 1. 获取ListView对象 2. 获取ListView的Adapter对象 3. 修改Adapter数据 4. 调用Adapter的notifyDataSetChanged()方法 5. 刷新ListView界面 具体代码如下: ListView listView = findViewById(R.id.list_view); MyAdapter adapter = (MyAdapter) listView.getAdapter(); adapter.setData(newData); adapter.notifyDataSetChanged(); listView.invalidateViews(); ### 回答2: 在Android开发ListView是一个非常常用的UI控件,它经常需要使用到刷新数据的功能。在ListView刷新数据,可以通过以下几种方式来实现: 1. notifyDataSetChanged()方法 使用notifyDataSetChanged()方法可以及时更新ListView数据。当ListView数据发生变化时,通过调用notifyDataSetChanged()方法就可以让ListView重新刷新数据,保证ListView数据是最新的。这种方法支持所有类型的Adapter。 2. notifyDataSetInvalidated()方法 使用notifyDataSetInvalidated()方法可以与notifyDataSetChanged()方法类似地更新ListView数据。但是与notifyDataSetChanged()方法不同的是,调用此方法后,ListView将不会自动刷新,需要手动调用ListView的刷新方法。 3. BaseAdapter的notifyDataSetChange()方法 如果你使用的是自定义的Adapter,则可以通过BaseAdapter的notifyDataSetChange()方法来实现ListView数据的刷新。通过调用notifyDataSetChange()方法,ListView会重新绑定数据源并展示所有的数据,保证ListView数据是最新的。 4. 利用Handler.sendMessage() 在ListView刷新数据还可以通过Handler.sendMessage()方法实现。在数据改变的地方使用Handler.sendMessage()方法,并在上面设置一个刷新UI的函数调用,这样当数据改变时就会刷新ListView数据。 综上所述,ListView刷新数据的方法有很多种,我们可以根据自己的需求选择合适的方法。但需要注意的是,刷新数据时要考虑数据源和数据的一致性,确保数据的正确性和完整性。 ### 回答3: Android ListView是用于显示数据列表的一个重要组件,数据列表的显示可以实现数据的动态刷新。下面我们来介绍一下如何刷新ListView数据。 1.使用Adapter的notifyDataSetChanged()方法:在ListView数据适配器,每次更新数据之后,都可以通过调用notifyDataSetChanged()方法来通知ListView数据已经改变,需要刷新UI界面。这个方法可以及时更新ListView显示数据。 2.使用Adapter的notifyDataSetInvalidated()方法:如果要彻底刷新整个ListView而不是仅仅刷新其数据,可以调用notifyDataSetInvalidate()方法,它会重绘ListView的所有子项,使ListView返回初始状态。 3.setSelection()方法:当ListView数据发生改变时,可以使用setSelection()方法来刷新ListView显示状态。调用这个方法后,ListView会滚动到当前选项或者顶部,默认是选的第一项。 4.使用Handler机制:使用Handler机制发送消息,线程调度机制会在消息队列依次处理。可以在Handler通过调用runOnUiThread()方法来更新UI界面,从而实现ListView数据动态刷新。 以上是几种ListView数据刷新的方法,不同的情况使用不同的方法,以达到最好的性能和体验。同时,我们还需要注意滑动ListView时的性能问题,应该避免频繁的数据刷新,以免影响ListView的滑动性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值