目录
ListView
自定义adapter,在ListView中加入header和foot,
//加载布局
mListView = (ListView) findViewById(R.id.list_view_test);
initFruit();
//找到布局中的控件
inflater = getLayoutInflater();
//加载ListView的头部布局
headerView = inflater.inflate(R.layout.header_layout, null);
//加载顶部布局中的按钮
mButtonCheckAll = (Button) headerView.findViewById(R.id.button_all);
//将header布局加载到ListView中
mListView.addHeaderView(headerView);
mButtonCheckAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fruitAdapter.checkAll();
}
});
ListView的简单应用
package com.example.linj.myfirstapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.example.linj.myfirstapplication.adapter.FruitAdapter;
import com.example.linj.myfirstapplication.modle.Fruit;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2015/8/25.
*/
public class FruitActivity extends Activity {
private ListView mListView;
private List<Fruit> mFruits;
private FruitAdapter fruitAdapter;
private LayoutInflater inflater;
private Button mButtonCheckAll;
private Button mButtonCheckNegative;
private View headerView;
private View footView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view_layout);
mListView = (ListView) findViewById(R.id.list_view_test);
initFruit();
inflater = getLayoutInflater();
headerView = inflater.inflate(R.layout.header_layout, null);
mButtonCheckAll = (Button) headerView.findViewById(R.id.button_all);
mListView.addHeaderView(headerView);
mButtonCheckAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fruitAdapter.checkAll();
}
});
footView = inflater.inflate(R.layout.foot_layout, null);
mButtonCheckNegative = (Button) footView.findViewById(R.id.button_negative);
mListView.addFooterView(footView);
mButtonCheckNegative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fruitAdapter.checkNegative();
}
});
fruitAdapter = new FruitAdapter(mFruits, inflater);
// ListView加上HeaderView以后position要减一
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
fruitAdapter.itemSelect(position - 1);
}
});
mListView.setAdapter(fruitAdapter);
}
private void initFruit() {
mFruits = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Fruit pineapple = new Fruit("pineapple", R.mipmap.pineapple);
Fruit strawberry = new Fruit("strawberry", R.mipmap.strawberry);
Fruit orange = new Fruit("orange", R.mipmap.orange);
Fruit apple = new Fruit("apple", R.mipmap.apple);
mFruits.add(pineapple);
mFruits.add(strawberry);
mFruits.add(orange);
mFruits.add(apple);
}
}
}
package com.example.linj.myfirstapplication.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.linj.myfirstapplication.R;
import com.example.linj.myfirstapplication.modle.Fruit;
import java.util.List;
/**
* Created by Administrator on 2015/8/25.
*/
public class FruitAdapter extends BaseAdapter {
private List<Fruit> mFruit;
private LayoutInflater mInflater;
private boolean[] mManagerAllCheckBox;
public FruitAdapter(List<Fruit> mFruit, LayoutInflater mInflater) {
this.mFruit = mFruit;
this.mInflater = mInflater;
mManagerAllCheckBox = new boolean[mFruit.size()];
}
/**
* 全选
*/
public void checkAll() {
for (int i = 0; i < mManagerAllCheckBox.length; i++) {
mManagerAllCheckBox[i] = true;
}
// 循环完以后通知刷新屏幕
notifyDataSetChanged();
}
/**
* 反选
*/
public void checkNegative() {
for (int i = 0; i < mManagerAllCheckBox.length; i++) {
mManagerAllCheckBox[i] = !mManagerAllCheckBox[i];
}
notifyDataSetChanged();
}
public void itemSelect (int position) {
mManagerAllCheckBox[position] = !mManagerAllCheckBox[position];
notifyDataSetChanged();
}
@Override
public int getCount() {
return mFruit.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
//设置缓存的convertView模型
if (convertView == null) {
convertView = mInflater.inflate(R.layout.fruit_layout, null);
viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check_fruit);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.image_fruit);
viewHolder.textView = (TextView) convertView.findViewById(R.id.text_fruit);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//将具体的数据放入convertView中
Fruit fruit = mFruit.get(position);
viewHolder.imageView.setImageResource(fruit.getImageId());
viewHolder.textView.setText(fruit.getFruitName());
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mManagerAllCheckBox[position] = isChecked;
notifyDataSetChanged();
}
});
viewHolder.checkBox.setChecked(mManagerAllCheckBox[position]);
return convertView;
}
class ViewHolder {
CheckBox checkBox;
ImageView imageView;
TextView textView;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<CheckBox
android:id="@+id/check_fruit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:focusable="false"
android:button="@drawable/check_radio"
android:text="选择水果"
/>
<ImageView
android:id="@+id/image_fruit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/text_fruit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水果名称"
android:textColor="#8800ee00"
/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/list_view_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全选"
/>
</LinearLayout>
总结
先写一个ListView,再写一个内容的布局,写一个活动加载ListView布局,用layoutIflater inflater 找到布局加载到ListView中,自定义一个适配器适配数据,适配器中的ViewHolder用来缓存数据,用notifyDataSetChanged方法通知界面刷新改变