day26

今天的内容是复习昨天的BasedView,并写一个相似的界面

界面设计

今天写的界面是复选框+图片+文本的组合,放在ListView中
细节方面,ListView每一项之间的间隔线换成绿色,ListView的最开头和最结尾分别添加一个按钮,为全选和反选,点击ListView的单项的时候,那个项会变化颜色。
activity_main——ListView的主体

<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"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/fruit_list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="#00000000"
        android:divider="@color/green"
        android:dividerHeight="1dp"
        >
    </ListView>

</RelativeLayout>

activity_fruit——ListView每一项的布局

<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"
    tools:context="com.example.administrator.adapter_project.Fruit_Activity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:background="@drawable/item_click"
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/fruit_CheckBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:layout_margin="10dp"
            android:text="选择水果"/>
        <ImageView
            android:id="@+id/fruit_ImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/fruit_TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="水果名称"/>
    </LinearLayout>
</RelativeLayout>

bottom_btn——底部的按钮

<?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/bottom_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="反选"/>
</LinearLayout>

upper_btn——顶部的按钮

<?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/upper_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="全选"/>
</LinearLayout>

drawable中:item_click——点击单项变色(颜色的RGB值可以再在网上找)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/gray" android:state_pressed="true"/>
    <item android:drawable="@color/white"/>
</selector>

功能概述

运行后,用户单击某一个项目,项目会变色,然后对应的checkBox会自动勾选,但是如果项目的内容有重复的话,勾选一个不能让其他项目的都选上。
单击顶部的 全选 按钮,会让所有的checkBox勾选上,单击底部的 反选 按钮,会让所有的checkBox反选(打钩的变成不打钩的,不打勾的变成打钩的)。
这个界面是模拟用户选水果的,所以要首先定义一个水果的类,并给他赋予初始的属性和set get方法。checkBox用isChecked方法来表明是否选上。
class Fruit:

public class Fruit {
    private String fruit_name;
    private int fruit_img;
    private boolean isChecked;
    public String getFruit_name() {
        return fruit_name;
    }
    public void setFruit_name(String fruit_name) {
        this.fruit_name = fruit_name;
    }

    public int getFruit_img() {
        return fruit_img;
    }

    public void setFruit_img(int fruit_img) {
        this.fruit_img = fruit_img;
    }

    public boolean isChecked() {
        return isChecked;
    }

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

    public Fruit(String fruit_name, int fruit_img) {
        this.fruit_name = fruit_name;
        this.fruit_img = fruit_img;
    }
}

控制Adapter的类Fruit_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.administrator.adapter_project.R;
import com.example.administrator.adapter_project.modle.Fruit;

import java.util.List;

/**
 * Created by Administrator on 2015/8/25.
 */
public class Fruit_Adapter extends BaseAdapter{
    private List<Fruit> mData;
    private LayoutInflater mInflater;
    private boolean[] mCheckBoxManager;
    //定义构造函数
    public Fruit_Adapter(List<Fruit> mData, LayoutInflater inflater) {
        this.mData = mData;
        this.mInflater = inflater;
        mCheckBoxManager = new boolean[mData.size()];
    }
    @Override
    public int getCount() {
        return mData.size();
    }
    //定义勾选与取消勾选的方法
    public void clickToCheck(int position){
        mCheckBoxManager[position] = !mCheckBoxManager[position];
        notifyDataSetChanged();
    }
    @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 vh = null;
        Fruit fruit = mData.get(position);
        if(convertView==null){
            convertView = mInflater.inflate(R.layout.activity_fruit_,null);
            vh = new ViewHolder();
            vh.fruit_CheckBox = (CheckBox) convertView.findViewById(R.id.fruit_CheckBox);
            vh.fruit_ImageView = (ImageView) convertView.findViewById(R.id.fruit_ImageView);
            vh.fruit_TextView = (TextView) convertView.findViewById(R.id.fruit_TextView);
            convertView.setTag(vh);
        }else{
            vh = (ViewHolder) convertView.getTag();
        }
        vh.fruit_ImageView.setImageResource(fruit.getFruit_img());
        vh.fruit_TextView.setText(fruit.getFruit_name());
        //设置复选框的事件监听
        vh.fruit_CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mCheckBoxManager[position] = isChecked;
                notifyDataSetChanged();
            }
        });
        vh.fruit_CheckBox.setChecked(mCheckBoxManager[position]);
        return convertView;
    }
    //因为是循环建立的内容,所以用一个ViewHolder方法避免重复获取ID,提高效率
    class ViewHolder{
        CheckBox fruit_CheckBox;
        ImageView fruit_ImageView;
        TextView fruit_TextView;
    }

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

运行主体的活动Fruit_Activity:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

import com.example.administrator.adapter_project.adapter.Fruit_Adapter;
import com.example.administrator.adapter_project.modle.Fruit;

import java.util.ArrayList;

public class Fruit_Activity extends AppCompatActivity {
    private ListView mListView;
    private ArrayList<Fruit> mData;
    private Fruit_Adapter mAdapter;
    private View upperView;
    private View bottomView;
    private Button mBtnCheckAll;
    private Button mBtnCheckFan;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListView = (ListView) findViewById(R.id.fruit_list_view);
        LayoutInflater inflater = getLayoutInflater();
        initData();
        mAdapter = new Fruit_Adapter(mData,inflater);
        upperView = inflater.inflate(R.layout.upper_btn,null);
        mBtnCheckAll = (Button)upperView.findViewById(R.id.upper_btn);
        mBtnCheckAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mAdapter.checkAll();
            }
        });
        mListView.addHeaderView(upperView);
        bottomView = inflater.inflate(R.layout.bottom_btn,null);
        mBtnCheckFan = (Button)bottomView.findViewById(R.id.bottom_btn);
        mBtnCheckFan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mAdapter.checkFan();
            }
        });
        mListView.addFooterView(bottomView);
        mListView.setAdapter(mAdapter);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mAdapter.clickToCheck(position - 1);
            }
        });
    }
    private void initData() {
        mData = new ArrayList<>();
        Fruit apple = new Fruit("苹果",R.mipmap.apple);
        Fruit orange = new Fruit("橘子",R.mipmap.orange);
        Fruit watermelon = new Fruit("西瓜",R.mipmap.watermelon);
        Fruit coconut = new Fruit("椰子",R.mipmap.coconut);
        for (int i= 0;i<10;i++){
            mData.add(apple);
            mData.add(orange);
            mData.add(watermelon);
            mData.add(coconut);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_fruit_, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

运行结果:
gif0001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值