关于listView学习,以及相关知识点延伸

ListView是android中常见的控件之一,对于它的了解和应用也是需要掌握的。

           ListView需要调用setAdapter(adapter)方法,通过adapter对象来连接数据和UI。Adapter对象负责把数据格式化,并与ListView绑定将数据提供给ListView显示,而ListView只负责控件的显示以及UI的交互事件的处理。

           adapter中getView方法实现使用数据、并更新UI,如果数据量大,且属于耗时操作,那么可以事先使用多线程,Asynctask来读取数据,再getView更新UI。已避免产生ANR问题。

  用手边教材的例子做示范。

package com.example.ex_emptylisetview;

import android.os.Bundle;
import android.app.ListActivity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity
{
	private CheeseAdapter mAdapter;
	
	private static final String[] EM = {};
	
	private static final String[] CH = {
		"asdf","qwe","tiu","fdhgfgh", "yhe",
		"werert", "sfsdfq"
	};
	
		
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mAdapter = new CheeseAdapter(CH);
	
		Log.d("onCreate", "madapter");
		setListAdapter(mAdapter);
		
	}

	@Override
	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;
	}
	
	public void onSetEmpty(View v)
	{
		mAdapter.changeData(EM);
	}
	
	public void onSetData(View v)
	{
		mAdapter.changeData(CH);
	}
	
	private class CheeseAdapter extends BaseAdapter
	{
		private String[] mData;
		
		private void changeData(String[] data)
		{
			mData = data;
			notifyDataSetChanged();
		}
		
		public CheeseAdapter(String[] mData)
		{
			super();
			this.mData = mData;
		}

		@Override
		public int getCount()
		{
			Log.d("getCount", "mData.length:"+mData.length);
			return mData.length;
		}

		@Override
		public String getItem(int position)
		{
			Log.d("getItem", "getItem"+position);
			return mData[position];
		}

		@Override
		public long getItemId(int position)
		{
			Log.d("getItemId", "getItemId:"+position);
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent)
		{	
			Log.d("getView", position+"");
			if(convertView ==null)
			{
				convertView = getLayoutInflater().
						inflate(R.layout.text_item, parent, false);
			}
			((TextView)convertView).setText(getItem(position));
			
			return convertView;
		}
	}
}

结果显示如下表:



setAdapter()方法后,会调用getCount()方法,之后是getView方法。

     

对于adapter中一些方法,做一个简单介绍。

int getCount() 返回数据信息数据总数量。

Object getItem(intposition) 从数据信息中返回下标position的数据项;

Long getItemId(intposition) 从数据信息中得到下标position的数据项的ID;

View getView(intposition, View converView, ViewGroup parent)ListView 通过它传进啊View;

intgetViewtypedCount()返回ListView使用View数量,默认为1;

intgetItemViewType(int position)根据position获得对应item使用的View类型。

booleanisEnabled(int position)根据position 设置对应的Item是否可用(是否能否接收UI事件,这句不大理解)

_______________________________


在scrollview 下显示全部的listview内容,这个问题也可以换个思路,那就是在listView HeaderView  和 FooterView 添加 scrollView 中listView 之前之后的内容。这样,整个展示效果和设定 listView 高度效果一致。

http://blog.csdn.net/tianxiangshan/article/details/7956488

http://my.oschina.net/f839903061/blog/60469

http://www.doc88.com/p-772890172277.html

三篇结合一起看。

<pre code_snippet_id="110283" snippet_file_name="blog_20131213_2_3683755">
 
 
 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值