您的位置:首页 > 产品设计 > UI/UE

08-25 convertView、ViewHolder、MyfruitPractice、divider、Header

2015-08-27 18:50 393 查看
convertView、ViewHolder

//convertView为了避免重复创建id,减少了加载的时间,占用内存比较少
//如果不用,每条数据都会生成一个view,使用两者,如果屏幕显示10个,生成14个左右的view,循环使用
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Student student=mDate.get(position);
ViewHolder vh=null;
if(convertView==null){
vh=new ViewHolder();
convertView=mInflater.inflate(R.layout.layout_simple,null);
vh.imageView= (ImageView) convertView.findViewById(R.id.imageview_head);
vh.teview_name= (TextView) convertView.findViewById(R.id.textview_name);
vh.textview_sex= (TextView) convertView.findViewById(R.id.textview_sex);
vh.textview_age= (TextView) convertView.findViewById(R.id.textview_age);
vh.texview_hobby= (TextView) convertView.findViewById(R.id.textview_hobby);
convertView.setTag(vh);
Log.d("converView","countview为空的加载"+(count));
}else{
vh= (ViewHolder) convertView.getTag();
Log.d("converView","countview不为空的加载"+(count));
}
count++;
vh.imageView.setImageResource(student.getImp());
vh.teview_name.setText(student.getName());
vh.textview_sex.setText(student.getSex());
vh.textview_age.setText(student.getAge());
vh.texview_hobby.setText(student.getHobby());
return convertView;
}
class ViewHolder {
ImageView imageView;
TextView teview_name;
TextView textview_sex;
TextView textview_age;
TextView texview_hobby;
}
}


MyfruitPractice、divider、Header

//**activity_fruit.xml**
<?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/lisiview_fruit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/pink"
android:dividerHeight="1dp"></ListView>
</LinearLayout>
![这里写图片描述](http://img.blog.csdn.net/20150825201018577)

//**fruit.xml**   view的模板
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">

<CheckBox
android:id="@+id/checkbox_fruit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:text="选择水果"/>
<ImageView
android:id="@+id/imageview_fruit"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/cherry"/>
<TextView
android:id="@+id/textview_cherry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="樱桃"/>
</LinearLayout>
![这里写图片描述](http://img.blog.csdn.net/20150825201224514)

//**Header 全选按钮**
<?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_checkAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全选"/>
</LinearLayout>

//**Foot  反选按钮**
<?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_fanxuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="反选"/>
</LinearLayout>

//**Fruit类**
package com.example.administrator.homework.model;

import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

/**
* Created by Administrator on 2015/8/25.
*/
public class Fruit {
private int  imageView;
private String textView;
private boolean isChecked;
public Fruit(int imageView, String textView) {
this.imageView = imageView;
this.textView = textView;
}

public int getImageView() {
return imageView;
}

public void setImageView(int imageView) {
this.imageView = imageView;
}

public String getTextView() {
return textView;
}

public void setTextView(String textView) {
this.textView = textView;
}

public boolean isChecked() {
return isChecked;
}

public void setIsChecked(boolean isChecked) {
this.isChecked = isChecked;
}

}

//**FruitAdapter类**
package com.example.administrator.homework.adapter;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.administrator.homework.MyFruit;
import com.example.administrator.homework.R;
import com.example.administrator.homework.model.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[] mMangerALLCheckBox;

public FruitAdapter(List<Fruit> mFruit, LayoutInflater mInflater) {
this.mFruit = mFruit;
this.mInflater = mInflater;
mMangerALLCheckBox=new boolean[mFruit.size()];
}

//全选的方法
public void checkAll(){
for(int i=0;i<mMangerALLCheckBox.length;i++){
mMangerALLCheckBox[i]=true;
notifyDataSetChanged();
}
}
//反选的方法
public void fanxuan(){
for (int i = 0; i <mMangerALLCheckBox.length ; i++) {
mMangerALLCheckBox[i]=!mMangerALLCheckBox[i];
notifyDataSetChanged();
}
}

public void itemSeleck(int posotion){
mMangerALLCheckBox[posotion]=!mMangerALLCheckBox[posotion];
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) {
Fruit fruit=mFruit.get(position);
ViewHolder viewHolder=null;
if(convertView==null){
viewHolder=new ViewHolder();
convertView=mInflater.inflate(R.layout.fruit,null);
viewHolder.imageView= (ImageView) convertView.findViewById(R.id.imageview_fruit);
viewHolder.textView= (TextView) convertView.findViewById(R.id.textview_cherry);
viewHolder.checkBox= (CheckBox) convertView.findViewById(R.id.checkbox_fruit);
convertView.setTag(viewHolder);
}else{
viewHolder= (ViewHolder) convertView.getTag();
}
viewHolder.imageView.setImageResource(fruit.getImageView());
viewHolder.textView.setText(fruit.getTextView());
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("Myfruit","选择框发生变化"+isChecked);
//                mFruit.get(position).setIsChecked(isChecked);
mMangerALLCheckBox[position]=isChecked;
notifyDataSetChanged();
}
});
//        viewHolder.checkBox.setChecked(fruit.isChecked());
viewHolder.checkBox.setChecked(mMangerALLCheckBox[position]);
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView textView;
CheckBox checkBox;
}
}

//**MyFruitActivity类**
package com.example.administrator.homework;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

import com.example.administrator.homework.adapter.FruitAdapter;
import com.example.administrator.homework.adapter.StudentAdapter;
import com.example.administrator.homework.model.Fruit;
import com.example.administrator.homework.model.Student;

import java.util.ArrayList;
import java.util.List;

/**
* Created by Administrator on 2015/8/25.
*/
public class MyFruit extends Activity{
private ListView mListView;
private List<Fruit> mFruit;
private FruitAdapter mAdapter;
LayoutInflater mInflater;
private View mHeaderView;
private Button mBtnCheckAll;
private View mFootView;
private Button mBtnFan;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_myfruit);
mListView= (ListView) findViewById(R.id.lisiview_fruit);
mInflater=getLayoutInflater();
initDate();
//全选按钮
mHeaderView=mInflater.inflate(R.layout.fruit_header,null);
mBtnCheckAll= (Button) mHeaderView.findViewById(R.id.button_checkAll);
mBtnCheckAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.checkAll();
}
});
mListView.addHeaderView(mHeaderView);

//反选按钮
mFootView=mInflater.inflate(R.layout.fruit_foot,null);
mBtnFan= (Button) mFootView.findViewById(R.id.button_fanxuan);
mBtnFan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.fanxuan();
}
});
mListView.addFooterView(mFootView);

mAdapter=new FruitAdapter(mFruit,mInflater);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("MyFruit","选中的水果是:"+mFruit.get(position-1).getTextView());
mAdapter.itemSeleck(position-1);
}
});

}
private void initDate() {
mFruit = new ArrayList<>();
for (int i=0;i<5;i++){
Fruit apple = new Fruit(R.mipmap.apple,"苹果");
Fruit banana = new Fruit(R.mipmap.banana,"香蕉");
Fruit cherry = new Fruit(R.mipmap.cherry,"樱桃");
Fruit peach = new Fruit(R.mipmap.peach,"桃子");
mFruit.add(apple);
mFruit.add(banana);
mFruit.add(cherry);
mFruit.add(peach);
}

}
}
![这里写图片描述](http://img.blog.csdn.net/20150825202316242)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: