Android控件学习之ListView

ListView:是一个常用的控件,主要用于列表化的显示数据,通常与Adapter(数据适配器)一起使用。

准备工作:

1.首先得有一个ListView

2.什么样的数据(全文字?图文?等)

3.选择合适的Adapter(适配器)

4.根据数据设置相应合理的listview中item的布局方式!

5.适当的对listview进行优化处理

注:本人采用的是BaseAdapter


项目结构图:

Android控件学习之ListView_第1张图片



MainActivity.java

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

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import com.hql.widget_listview.data.ListData;
import com.hql.widget_listview.myadapter.ListAdapter;

public class MainActivity extends Activity
{
	// 定义控件
	private ListView mListView;
	// 定义数据适配器
	private ListAdapter mListAdapter;
	// 数据集合
	private List<String> myList = new ArrayList<String>();
	private ListData listData = new ListData();

	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		myList = listData.getData();
		// 实例化数据适配器
		mListAdapter = new ListAdapter(MainActivity.this, myList);
		// 设置数据源
		mListView.setAdapter(mListAdapter);
	}

	/**
	 * 初始化控件
	 */
	private void initView()
	{
		mListView = (ListView) findViewById(R.id.myListView);
	}

}

ListData.java

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

public class ListData
{
	List<String> list = new ArrayList<String>();

	public List<String> getData()
	{
		for (int i = 1; i < 50; i++)
		{
			list.add("这是数据:" + i);
		}
		return list;
	}
}

ListAdapter.java

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

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.hql.widget_listview.R;

public class ListAdapter extends BaseAdapter
{
	// 上下文
	private Context mContext;
	private List<String> mList = new ArrayList<String>();
	// 布局加载器
	private LayoutInflater mInflater;

	public ListAdapter(Context context, List<String> list)
	{
		this.mContext = context;
		this.mList = list;
		// 实例化布局加载器
		this.mInflater = LayoutInflater.from(mContext);
	}

	public int getCount()
	{
		// 数据大小
		return mList.size();
	}

	public Object getItem(int position)
	{
		return position;
	}

	public long getItemId(int position)
	{
		return position;
	}

	public View getView(int position, View view, ViewGroup parent)
	{
		
		ViewHolder holder = null;
		if (view == null)
		{
			holder = new ViewHolder();
			// 加载一个listview中item的布局文件
			view = mInflater.inflate(R.layout.list_item, null);
			// 查找要显示在那个控件上,这儿是Textview
			holder.showContent = (TextView) view.findViewById(R.id.show_content);
			view.setTag(holder);
		} else
		{
			holder = (ViewHolder) view.getTag();
		}
		holder.showContent.setText(mList.get(position).toString());
		return view;
	}

	/**
	 * 静态类
	 * 
	 * @author Administrator
	 *
	 */
	static class ViewHolder
	{
		TextView showContent;
	}

}

布局文件:

activity_main.xml

<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" >

    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none" >
    </ListView>

</RelativeLayout>


/**

android:scrollbars="none":去掉右边的滑动条

*/
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="vertical" >

    <TextView
        android:id="@+id/show_content"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:textColor="#0f0"
        android:textSize="18sp" />

</LinearLayout>

优化:主要是是对BaseAdapter中的getView方法进行优化,

第一步优化:通过定义一个静态类,因为静态类第一次加载费时之后加载很快。同时保持内存唯一,节约内存。

第二步优化:通过对BaseAdapter中的getView方法进行优化

public View getView(int position, View view, ViewGroup parent)

重用第二个参数view,判断是否为空,为空即执行加载布局和查找控件,并设置tag



效果图:








你可能感兴趣的:(Android控件学习之ListView)