Android之ListView控件
16lz
2021-01-23
实现如图效果: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>
2fruit_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);}}
更多相关文章
- Android UI布局
- android中的提示信息显示方法(toast应用)
- adb devices 找不到设备的解决方法
- android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用
- android获取各种系统路径的方法
- android 应用如何获取系统权限 以及root系统方法
- Android 和 JS 交互时调用不成功解决方法
- android应用程序最小化的处理方法