ListView的一些使用方式

本文介绍如何在Android应用中实现ListView的复选框设置,并通过自定义适配器展示列表项,包括图片和多行文本。此外,还展示了如何结合OnItemSelectedListener和OnClickListener监听器来响应用户的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.Harris.listview1activity.ListView1Activity" >

    <TextView
        android:id="@+id/topText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="最喜欢的球类运动" 
        android:textSize="20sp"/>
    
    <ListView 
        android:id="@+id/lstPrefer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />
    <TextView 
        android:id="@+id/txtResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示消息"
        android:textSize="20sp"
        />
    <Button 
        android:id="@+id/btnDo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="选择"
        />

</LinearLayout>


Java代码

package com.Harris.listview1activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class ListView1Activity extends Activity {
	private ListView lstView;
	private TextView txtResult,topText;
	String[] Balls ={"篮球","足球","棒球","橄榄球","其他"};
	private Button btnDo;
	private int count;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		topText =(TextView) findViewById(R.id.topText);
		lstView = (ListView) findViewById(R.id.lstPrefer);
		txtResult = (TextView) findViewById(R.id.txtResult);
		btnDo = (Button) findViewById(R.id.btnDo);
		//Eclipse自动添加的ArrayAdater看到参数为(Context context,int resources) 
		//这句话是创建ArrayAdapter并设置样式
		ArrayAdapter<String> adapterBalls = new ArrayAdapter<String>(this, 
				android.R.layout.simple_list_item_multiple_choice,Balls);
		lstView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		//以下设置ListView的数据源
		lstView.setAdapter(adapterBalls);
		//获取当前选择的项目数,接下来的监听器循环要用
		count = adapterBalls.getCount();
		
		//绑定监听器啦啦啦
		lstView.setOnItemClickListener(new lstViewListener());
		
		btnDo.setOnClickListener(new OnClickListener(){

			

			@Override
			public void onClick(View v) {
				String selAll="";
				for(int p =0;p<count;p++){
					if(lstView.isItemChecked(p))
					selAll+= Balls[p]+"";
				}
				txtResult.setText("我最喜欢的球类运动是"+selAll);
				
			}
			
		});
		
	}
		
	

	//下面就是制作触发动作的监听器这一类的老生常谈了
	class lstViewListener implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> parent, View v, int position,
				long id) {
			String sel = parent.getItemAtPosition(position).toString();
			
			if(lstView.isItemChecked(position)){
				topText.setText("目前选择"+sel);
			}else{
				topText.setText("目前选择 ");
			}
			
		}
		
	}	
		
		
	
}

以上就是ListView的复选框设置以及同时使用OnItemSelectedListener和OnClickListener监听以及使用内部类和匿名内部类的方法,哈哈。

------------------------------------------------------------------------------分割线君-------------------------------------------------------------------------------------------

接下来就是对于listView的私人订制了,通过在MyAdapter中生成一个LayoutInflater,

使用预先在res/layout文件夹里面写好的fruitlayout.xml(这里一个大写字母都不行!!!,不是名字开头也不行!!!

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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.Harris.ch07_ex1.MainActivity" >
	
    <Button 
        android:id="@+id/addButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="加入购物车"
        android:layout_below="@id/action_bar_title"
        />
    <TextView
        android:id="@+id/txtResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="已选择的物品" 
        android:layout_below="@id/addButton"
        />
    <ListView 
        android:id="@+id/lstFruit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtResult"
        />
	
</RelativeLayout>

fruitlayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.Harris.ch07_ex1.MainActivity" >
	
   <ImageView 
       android:id="@+id/imgLogo"
       android:layout_width="50sp"
       android:layout_height="50sp"
       android:src="@drawable/f014"
       android:layout_margin="10sp"
       />
   <LinearLayout 
       android:id="@+id/LinerLayout2"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">
       <TextView
           android:id="@+id/txtname"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="第一行文字"
           android:textSize="24sp"
           android:textColor="#ff00ff"
           android:layout_marginLeft="10sp"
           android:layout_marginTop="5sp"
           />
       <TextView
			android:id="@+id/txtengname"
			android:layout_width="match_parent"
			android:layout_height="wrap_content"
			android:text="第二行文字"        
			android:textSize="16sp"
			android:textColor="#00ff00"
			android:layout_marginLeft="10sp"   
           />
       
       
       </LinearLayout>
	
</LinearLayout>

Java代码

package com.Harris.ch07_ex1;


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private Button addButton;
	private ListView lstFruit; 
	private TextView txtResult;
	int[] resIds = new int[]{R.drawable.f014,R.drawable.f015,R.drawable.f016,
			R.drawable.f017,R.drawable.f018};
	private String[] Fruits = {"苹果","香蕉","葡萄","香瓜"};
	private String[] engnames={"apple","banana","grape","pineapple"};
	private int count;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		addButton= (Button) findViewById(R.id.addButton);
		lstFruit = (ListView) findViewById(R.id.lstFruit);
		txtResult = (TextView) findViewById(R.id.txtResult);
		
		
		lstFruit.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		lstFruit.setAdapter(new MyAdapter(this));
		
		addButton.setOnClickListener(new addListener());
		lstFruit.setOnItemClickListener(new lstFruitListener());
		
	}

	
	class addListener implements OnClickListener{
		int count = Fruits.length;
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			String selAll="";
			for(int p=0;p<count;p++){
				if(lstFruit.isItemChecked(p))
					selAll+=Fruits[p]+"";
			}
			txtResult.setText(selAll);
		}
		
	}
	
	
	class lstFruitListener implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> parent, View v, int position,
				long id) {
			if(lstFruit.isItemChecked(position)){
				String sel=parent.getItemAtPosition(position).toString();
				txtResult.setText(sel);
			}else
			{
				txtResult.setText(" ");
			}
		}
	}
	
	public class MyAdapter extends BaseAdapter{
		//生成一个LayoutInflater对象,就靠它提取我们之前写的xml构建一个View啦。
		private LayoutInflater myInflater;
		//继承了BaseAdapter就是有这么多的方法需要复写,而且都不是空白意义的
		public  MyAdapter(Context c) {
			myInflater= LayoutInflater.from(c);
		}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return Fruits.length;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return Fruits[position];
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		//几个参数,positon是用作数组下标,convertView是新构建的View,Groupparent暂时还不清楚哈
		public View getView(int position, View convertView, ViewGroup Groupparent) {
			convertView = myInflater.inflate(R.layout.fruitlayout,null);
			ImageView imgLogo = (ImageView) convertView.findViewById(R.id.imgLogo);
			TextView txtname = (TextView) convertView.findViewById(R.id.txtname);
			TextView txtengname = (TextView) convertView.findViewById(R.id.txtengname);
			
			imgLogo.setImageResource(resIds[position]);
			txtname.setText(Fruits[position]);
			txtengname.setText(engnames[position]);
			
			return convertView;
			
		}
		
	}
}

注意先前要在resource文件夹里面放几张照片,谢谢。

这个程序只是我照着书上的代码敲下来的,完全只是为了学习之前让人头疼不已的ListView的问题才写的,先留在这里,改天回来再优化。

完事。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值