Android之ListView控件

来源:互联网 发布:windows c语言编译器 编辑:程序博客网 时间:2024/04/20 11:19

实现如图效果: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;  //水果对应图片的资源idpublic 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 TextViewfruitName ;private View view;/*实现ArrayAdapter<>的方法 * ArrayAdapter重写了父类的一组构造函数,用于将上下文,ListView子项布局的id和数据都传递进来 * *///1方法public FruitAdapter(Context context,  //上下文int textViewResourceId, //ListView子项布局的idList<Fruit> objects)   //数据{super(context, textViewResourceId, objects);resourceId = textViewResourceId ; }//2又重写了getView()方法//这个方法是每个子项被滚动到屏幕内的时候被调用@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Fruitfruit = 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>();@Overrideprotected 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() {@Overridepublic 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);}}



0 0
原创粉丝点击