直接上代码
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>
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的问题才写的,先留在这里,改天回来再优化。
完事。