安卓开发中ListView是最常用的,也是最重要的用法之一,作为一个刚刚步入安卓开发之旅的初学者,ListView的熟练运用是必备技能之一。下面是个人学习过程中的一个实例。
package com.example.admin.listviewmodel; import android.app.ListActivity; import android.os.Bundle; //继承ListActivity,直接为其指定adapter即可, // activity继承了ListActivity,那么布局文件里面就一定要实例化一个listview的 //并且listview的id attribute必须为 android:id="@android:id/list" public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListViewAdapter listViewAdapter=new ListViewAdapter(this);//将context传递过去 setListAdapter(listViewAdapter);//指定adapter } }
<LinearLayout 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:orientation="vertical" tools:context=".MainActivity"> <ListView android:id="@android:id/list"必须为 android:id="@android:id/list",否则会报错
android:layout_width="fill_parent"android:layout_height="wrap_content" > </ListView></LinearLayout>
package com.example.admin.listviewmodel; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; /** * Created by Admin on 2015/9/16. */ public class ListViewAdapter extends BaseAdapter { private Context context; //下面的getView要用到context public ListViewAdapter (Context context){ this.context=context; addMessage(); } public Context getContext() { return context; } @Override public int getCount() { return messageList.size(); } @Override public Object getItem(int position) { return messageList.get(position); } @Override public long getItemId(int position) { return position;//只要保证唯一性即可,位置就是唯一性的 } //getView是最重要的 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public View getView(int position, View convertView, ViewGroup parent) { //避免每一次都获取布局资源消耗较大 ViewHolder v; if (convertView==null){ convertView= LayoutInflater.from(getContext()).inflate(R.layout.itemlayout,null); v=new ViewHolder(); v.imageView= (ImageView) convertView.findViewById(R.id.tvimage); v.textView= (TextView) convertView.findViewById(R.id.tvtext); convertView.setTag(v); }else { v=(ViewHolder)convertView.getTag(); } Message msg= (Message) getItem(position); v.getImageView().setBackgroundResource(R.mipmap.ic_launcher); v.getTextView().setText(msg.getName()); return convertView; } List<Message> messageList=new ArrayList<Message>(); public void addMessage(){ for (int i = 0; i <20 ; i++) { this.messageList.add(i,new Message("---syd--"+i)); notifyDataSetChanged();数据有改变要更新列表 } } public void clear(){ messageList.clear(); notifyDataSetChanged();数据有改变要更新列表 } private static class ViewHolder{ private ImageView imageView=null; private TextView textView=null; public ImageView getImageView() { return imageView; } public TextView getTextView() { return textView; } } }
package com.example.admin.listviewmodel; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; /** * Created by Admin on 2015/9/16. */ public class Message { private String name; public Message(String name){ this.name=name; } public String getName() { return name; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="20dp">为每条数据之间指定间距 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvimage" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvtext" android:textAppearance="?android:textAppearanceLarge"/> </LinearLayout>运行后的效果: