实现如图效果:1.水果名字,和水果照片
2.点击ListView 响应点击事件
首先写布局文件:
1 activity_main.xml给ListView设置id
<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" tools:context=".MainActivity" > <ListView android:id="@+id/list_View" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
2 fruit_item.xml android:layout_gravity="center 让文字居中显示
<pre name="code" class="html"><?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="horizontal" > <ImageView android:id="@+id/fruit_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" /> <!-- android:layout_gravity="center" 让文字居中显示 --> </LinearLayout>
<span style="font-family: Arial, Helvetica, sans-serif;">布局写好了,然后就开始写java代码吧</span>Fruit.java
package com.example.listviewtest; public class Fruit { private String name; //水果名称 private int imageId; //水果对应图片的资源id public Fruit(String name, int imageId) //有参数的构造函数 { this.name = name; this.imageId = imageId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } }MainActivity.java
在MainActivity中 首先要有显示的资源文件在这里定义一个
private List<Fruit> fruitList = new ArrayList<Fruit>(); 接下来自定义一个适配器,这个适配器继承自ArrayAdapter,并将泛型制定为Fruit类
新建FruitAdapter
package com.example.listviewtest; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class FruitAdapter extends ArrayAdapter<Fruit> //将泛型指定为Fruit类 { private int resourceId; private ImageView fruitImage; private TextView fruitName ; private View view; /*实现ArrayAdapter<>的方法 * ArrayAdapter重写了父类的一组构造函数,用于将上下文,ListView子项布局的id和数据都传递进来 * */ //1方法 public FruitAdapter( Context context, //上下文 int textViewResourceId, //ListView子项布局的id List<Fruit> objects) //数据 { super(context, textViewResourceId, objects); resourceId = textViewResourceId ; } //2又重写了getView()方法 //这个方法是每个子项被滚动到屏幕内的时候被调用 @Override public View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position);//首先通过getItem()获得当前项的Fruit实例 ViewHolder viewHolder; if(convertView == null)//如果不空,调用缓存加载出来,如果为空独自获取数据加载 { //然后使用LayoutInflater来为这个子项加载我们传入的布局 view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); //接着调用的View的FindViewById()的方法分别获得ImageView和TextView的实例 viewHolder.fruitImage =(ImageView) view.findViewById(R.id.fruit_image); viewHolder.fruitName =(TextView) view.findViewById(R.id.fruit_name); view.setTag(viewHolder); //将viewHolder存储在view中 } else { view =convertView; viewHolder = (ViewHolder) view.getTag(); //重新获取viewHolder } /* fruitImage =(ImageView) view.findViewById(R.id.fruit_image); fruitName =(TextView) view.findViewById(R.id.fruit_name);*/ //再用它们的setImageResource(fruit.getImageId()),setText(fruit.getName());方法显示图片和文字 viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName()); return view ; } class ViewHolder //这里为了提高效率,用一个ViewHolder类,来缓存,在上面做一个判断, { ImageView fruitImage; TextView fruitName; } }MainActivity.java
package com.example.listviewtest; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class MainActivity extends Activity { private List<Fruit> fruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruit(); //初始化水果的数据 FruitAdapter adapter = new FruitAdapter(getApplicationContext(),R.layout.fruit_item,fruitList); ListView listview = (ListView) findViewById(R.id.list_View); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { Fruit fruit = fruitList.get(position); Toast.makeText(MainActivity.this, "你他妈的点击了"+fruit.getName(), 0).show(); } }); } private void initFruit() { Fruit aa = new Fruit("aa", R.drawable.aa); fruitList.add(aa); Fruit bb = new Fruit("bb", R.drawable.bb); fruitList.add(bb); Fruit cc = new Fruit("cc", R.drawable.cc); fruitList.add(cc); Fruit ee = new Fruit("ee", R.drawable.ee); fruitList.add(ee); Fruit ff = new Fruit("ff", R.drawable.ff); fruitList.add(ff); Fruit gg = new Fruit("gg", R.drawable.gg); fruitList.add(gg); Fruit hh = new Fruit("hh", R.drawable.hh); fruitList.add(hh); Fruit ii = new Fruit("ii", R.drawable.ii); fruitList.add(ii); Fruit jj = new Fruit("jj", R.drawable.jj); fruitList.add(jj); Fruit ll = new Fruit("ll", R.drawable.ll); fruitList.add(ll); Fruit mm = new Fruit("mm", R.drawable.mm); fruitList.add(mm); } }