您的位置:首页 > 其它

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

2013-08-13 21:01 295 查看
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 高度效果一致。

/article/9154339.html

/article/3466356.html

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

三篇结合一起看。

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







                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: