AndroidUI设计——ListView练习(制作⽔果选择菜单)
功能说明:
通过使⽤ListView制作⼀个⽔果选择菜单,菜单中有多种⽔果,菜单每种⽔果以⽔果选择框, ⽔果图⽚, ⽔果名称的形式展现在ListView中的每个Item中。
1. 通过⽔果多选框可以选择想要的⽔果。
2. 通过点击每条Item的任意地⽅也可以选择⽔果。
3. ListView最顶端设置有顶部全选按钮,通过点击按钮可以全部选中⽔果。
4. ListView最低端设置有底部反选按钮,通过点击按钮可以反选⽔果。
这只是⼀个简单的⼩练习,界⾯⽐较简单粗略,仅⽤来练习使⽤,⼤神们不要嫌弃……嘿嘿
Frist.显⽰列表的实现
做什么都是⼀步⼀步来的,⾸先我们要先构建显⽰列表,这就要⽤到我们在前⼀节所⽤到的⾃定义Adapter,通过⾃定义Adapter来构建显⽰列表。
回想⼀下⾃定义Adapter的步骤:
M,即Model。构建数据。⾸先我们要先创建显⽰在⽔果菜单上的⽔果数据。定义⼀个Fruit类。
public class Fruit {
private boolean mCheckBoxchecked;//是否选中⽔果。
private int mImage;//⽔果图⽚
private String mFruitName;//⽔果名称
//⾃定义构造器,通过构造器来对⽔果初始化。
public Fruit(int mImage, String mFruitName) {
this.mImage = mImage;
this.mFruitName = mFruitName;
}
public boolean ismCheckBoxchecked() {
return mCheckBoxchecked;
}
public void setmCheckBoxchecked(boolean mCheckBoxchecked) {
this.mCheckBoxchecked = mCheckBoxchecked;
}
public int getmImage() {
return mImage;
}
public void setmImage(int mImage) {
this.mImage = mImage;
}
public String getmFruitName() {
return mFruitName;
}
public void setmFruitName(String mFruitName) {
this.mFruitName = mFruitName;
}
}
V,即View。构建数据显⽰的视图。我们是以什么样的形式来显⽰Fruit的。然后⾃定义⼀个Adapter,通过⾃定义的Adapter将⽔果数据添加到View视图中。
这⾥我们⽤下图⽅式来构建View视图,也就是⽔果显⽰的⽅式。布局⽂件就不在贴出,在最后会给出源代码。
⾃定义的Adapter:
public class FruitAdapter extends BaseAdapter{
private List<Fruit> mFruit;//⽔果数据
private LayoutInflater mInflater;//LayoutInflater 加载布局
//⾃定义构造器,接收数据和加载布局的LayoutInflater对象。
public FruitAdapter(List<Fruit> mFruit, LayoutInflater mInflater) {
this.mFruit = mFruit;
this.mInflater = mInflater;
}
@Override
public int getCount() {
return mFruit.size();//获得Item的数量
}
@Override
public Object getItem(int position) {
return position;//获得Item的位置
}
@Override
public long getItemId(int position) {
return position;//获得Item的Id,我们这⾥依然返回位置。
}
@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
//ViewHolder创建对象。
ViewHolder viewHolder = new ViewHolder();
//获得该Item下的⽔果对象。
Fruit fruit =(position);
if(convertView == null){
convertView = mInflater.inflate(R.layout.item_list_fruit, null);
viewHolder.checkBoxSelect = (CheckBox) convertView.findViewById(R.id.checkbox_select);
viewHolder.imageViewFruit = (ImageView) convertView.findViewById(R.id.imageview_fruit);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) Tag();
}
viewHolder.imageViewFruit.Image());
return convertView;
}
class ViewHolder{
ImageView imageViewFruit;
TextView textViewFruitName;
}
}
- C,即Control。控制总体,⾸先初始化数据,然后将⾃⼰设置好的View添加到ListView中。Activity中的布局:
<RelativeLayout xmlns:android="schemas.android/apk/res/android"
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/lisview_fruit"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>
Activity类:
public class MainActivity extends Activity {
private List<Fruit> mFruit;
private ListView mListViewFruit;
private FruitAdapter mAdapter;
private LayoutInflater mInflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
//获得ListView的对象
mListViewFruit = (ListView) findViewById(R.id.lisview_fruit);
//获得布局加载对象
mInflater = getLayoutInflater();
//初始化数据
initData();
//创建⾃定义Adapter的对象
mAdapter = new FruitAdapter(mFruit, mInflater);
mListViewFruit.setAdapter(mAdapter);
}
view ui框架//初始化数据。
private void initData() {
mFruit = new ArrayList<Fruit>();
//有点偷懒,这⾥⽔果为了增加数量就循环添加了,不在⼀⼀初始化
for (int i = 0; i < 5; i++) {
Fruit apple = new Fruit(R.mipmap.apple, "苹果");
Fruit banana = new Fruit(R.mipmap.banana, "⾹蕉");
Fruit grape = new Fruit(ape, "葡萄");
Fruit watermelon = new Fruit(R.mipmap.watermelon, "西⽠");
Fruit pineapple = new Fruit(R.mipmap.pineapple, "菠萝");
mFruit.add(apple);
mFruit.add(banana);
mFruit.add(grape);
mFruit.add(watermelon);
mFruit.add(pineapple);
}
}
}
结果:
Two.选择框选择⽔果功能的实现
第⼀步我们已经完成了基本的显⽰功能。让我们来添加第⼆个功能。通过点击⽔果图⽚前⾯的选择框来中⽔果。这就⽤到了CheckBox 的点击事件。我们通过监听选择框的状态来断定选择的⽔果。
对⾃定义Adapter 修改如下(在getView()⽅法中添加店家事件。)
public class FruitAdapter extends BaseAdapter{
private List<Fruit> mFruit;
private LayoutInflater mInflater;
private boolean[] mManagerCheckBox;//管理图⽚前选择框的状态。
public FruitAdapter(List<Fruit> mFruit, LayoutInflater mInflater) {
this.mFruit = mFruit;
this.mInflater = mInflater;
//初始化CheckBox的管理器,其长度为数据的数量。默认初始化值为false。
mManagerCheckBox=new boolean[mFruit.size()];
}
@Override
public int getCount() {
return mFruit.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论