ListView:是一个常用的控件,主要用于列表化的显示数据,通常与Adapter(数据适配器)一起使用。
准备工作:
1.首先得有一个ListView
2.什么样的数据(全文字?图文?等)
3.选择合适的Adapter(适配器)
4.根据数据设置相应合理的listview中item的布局方式!
5.适当的对listview进行优化处理
注:本人采用的是BaseAdapter
项目结构图:
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); } }
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; } }
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方法进行优化
public View getView(int position, View view, ViewGroup parent)
重用第二个参数view,判断是否为空,为空即执行加载布局和查找控件,并设置tag
效果图: