ListView CheckBox 仿百度小说界面UI

不废话,直接上代码

效果图:

主要代码:

CheckBean:

package baidu.example.ui;

public class CheckBean {
	private int id;
	private boolean isCheck;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public boolean isCheck() {
		return isCheck;
	}
	public void setCheck(boolean isCheck) {
		this.isCheck = isCheck;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public CheckBean(int id, boolean isCheck, String name) {
		super();
		this.id = id;
		this.isCheck = isCheck;
		this.name = name;
	}
	public CheckBean(boolean isCheck, String name) {
		super();
		this.isCheck = isCheck;
		this.name = name;
	}
	public CheckBean() {
		super();
	}
	@Override
	public String toString() {
		return "CheckBean [id=" + id + ", isCheck=" + isCheck + ", name="
				+ name + "]";
	}

}

MyAdapter:

package baidu.example.ui;

import java.util.ArrayList;

import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter{
private ArrayList<CheckBean> list;
private LayoutInflater inflater;
private CallbackPosition callback;
	public static int type=0;
	public MyAdapter(LayoutInflater layoutInflater, ArrayList<CheckBean> data,CallbackPosition callback) {
		// TODO Auto-generated constructor stub
		this.setList(data);
		this.inflater=layoutInflater;
		this.callback=callback;
	}

	public ArrayList<CheckBean> getList() {
		return list;
	}

	public void setList(ArrayList<CheckBean> list) {
		if(list!=null){
			this.list = list;
		}else{
			list=new ArrayList<CheckBean>();
		}
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public CheckBean getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return getItem(position).getId();
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder v=null;
		if(convertView==null){
			v=new ViewHolder();
			convertView=inflater.inflate(R.layout.item_main, null);
			v.name=(TextView)convertView.findViewById(R.id.textView_a);
			v.checkbox=(CheckBox)convertView.findViewById(R.id.checkBox1);
			convertView.setTag(v);
		}else{
			v=(ViewHolder) convertView.getTag();
		}
		CheckBean bean=getItem(position);
		if(type==0){
			v.checkbox.setVisibility(View.GONE);
		}else if(type==1){
			v.checkbox.setVisibility(View.VISIBLE);
		}
		v.checkbox.setChecked(bean.isCheck());
		String name=bean.getName();
		v.name.setText(name);

		v.checkbox.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
			callback.callbackDeletePosition(position);
			}
		});
		return convertView;
	}

	public interface CallbackPosition{
		void callbackDeletePosition(int position);
	}
}

MainActivity:

package baidu.example.ui;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Notification.Action;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import baidu.example.ui.MyAdapter.CallbackPosition;

public class MainActivity extends Activity implements OnItemLongClickListener,OnClickListener,CallbackPosition{

	private ListView listview;
	private MyAdapter adapter;
	private Button cancel;
	private Button delete;
	private baidu.example.ui.ViewHolder vhs;
	private ImageView load_null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview=(ListView)findViewById(R.id.listView1);
		cancel=(Button)findViewById(R.id.button_cancel);
		delete=(Button)findViewById(R.id.button_delete);
		load_null=(ImageView)findViewById(R.id.imageView1);

	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		MyAdapter.type=0;
		adapter=new MyAdapter(getLayoutInflater(),getData(),this);
		listview.setAdapter(adapter);
		listview.setOnItemLongClickListener(this);
		cancel.setOnClickListener(this);
		delete.setOnClickListener(this);
	}
	private ArrayList<CheckBean> getData() {
		// TODO Auto-generated method stub
		ArrayList<CheckBean> list=new ArrayList<CheckBean>();
		CheckBean bean1=new CheckBean(0, false, "A");
		CheckBean bean2=new CheckBean(1, false, "B");
		CheckBean bean3=new CheckBean(2, false, "C");
		CheckBean bean4=new CheckBean(3, false, "D");
		CheckBean bean5=new CheckBean(4, false, "E");
		CheckBean bean6=new CheckBean(5, false, "F");
		CheckBean bean7=new CheckBean(6, false, "G");
		CheckBean bean8=new CheckBean(7, false, "H");
		CheckBean bean9=new CheckBean(8, false, "I");
		CheckBean bean10=new CheckBean(9, false, "J");
		CheckBean bean11=new CheckBean(10, false, "K");
		CheckBean bean12=new CheckBean(11, false, "L");
		CheckBean bean13=new CheckBean(12, false, "M");
		CheckBean bean14=new CheckBean(13, false, "N");
		list.add(bean1);
		list.add(bean2);
		list.add(bean3);
		list.add(bean4);
		list.add(bean5);
		list.add(bean6);
		list.add(bean7);
		list.add(bean8);
		list.add(bean9);
		list.add(bean10);
		list.add(bean11);
		list.add(bean12);
		list.add(bean13);
		list.add(bean14);

		return list;
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		boolean flag=KeyDownUtils.onKeyDownEvent(event, MyAdapter.type, this);
		if(flag){
			return flag;
		}else{
			return super.onKeyDown(keyCode, event);
		}
	}
	@Override
	public void callbackDeletePosition(int position) {
		// TODO Auto-generated method stub
		CheckBean entity = adapter.getItem(position);
		int visiblePosition = listview.getFirstVisiblePosition();
		// 得到你需要更新item的View
		vhs = new ViewHolder();
		int vpotion = position - visiblePosition;
		Log.i("info", "vpotion:" + vpotion);
		View view = listview.getChildAt(vpotion);
		vhs.checkbox=(CheckBox)view.findViewById(R.id.checkBox1);
		entity.setCheck(vhs.checkbox.isChecked());
		adapter.getList().get(position).setCheck(entity.isCheck());
		vhs.checkbox.setChecked(entity.isCheck());
		adapter.notifyDataSetChanged();

	}

	@Override
	public boolean onItemLongClick(AdapterView<?> parent, View view, final int position,
			long id) {
		// TODO Auto-generated method stub
		if(MyAdapter.type==0){
			MyAdapter.type=1;
			cancel.setVisibility(View.VISIBLE);
			delete.setVisibility(View.VISIBLE);
			CheckBean beanIndex=adapter.getList().get(position);
			beanIndex.setCheck(true);
			listview.post(new Runnable() {

				@Override
				public void run() {
					// TODO Auto-generated method stub
					listview.setSelection(position);
				}
			});
			adapter.notifyDataSetChanged();
		}
		return false;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v==cancel){
			cancel.setVisibility(View.GONE);
			delete.setVisibility(View.GONE);
			MyAdapter.type=0;
			for (int i = 0; i < adapter.getList().size(); i++) {
				adapter.getList().get(i).setCheck(false);
			}
			listview.post(new Runnable() {

				@Override
				public void run() {
					// TODO Auto-generated method stub
					listview.setSelection(0);
				}
			});
			adapter.notifyDataSetChanged();
		}else if(v==delete){
			ArrayList<CheckBean> deletelist=new ArrayList<CheckBean>();
			ArrayList<CheckBean> list=new ArrayList<CheckBean>();
			for (int i = 0; i < adapter.getList().size(); i++) {
				if(!adapter.getList().get(i).isCheck()){
					list.add(adapter.getList().get(i));
				}else{
					deletelist.add(adapter.getList().get(i));
				}
			}

			//调用删除(网络或者本地缓存)逻辑
			if(deletelist.size()==0){
				Toast.makeText(this, "请选中删除项", Toast.LENGTH_SHORT).show();
			}else{
				cancel.setVisibility(View.GONE);
				delete.setVisibility(View.GONE);
				MyAdapter.type=0;
				listview.post(new Runnable() {

					@Override
					public void run() {
						// TODO Auto-generated method stub
						listview.setSelection(0);
					}
				});
				if(list.size()==0){
					load_null.setVisibility(View.VISIBLE);
				}
				adapter.setList(list);
				adapter.notifyDataSetChanged();
			}
		}
	}

}

demo就不上传了,如果有需要就留言

时间: 2024-10-29 19:11:16

ListView CheckBox 仿百度小说界面UI的相关文章

android listview + checkbox 列表上下滑动导致复选框状态丢失解决办法

以前为这个问题头疼很久.然后去忙其他事情.一直没有去整理,今天好不容易闲下来.就来整整这个listview + checkbox的问题吧 界面: listview_cell: 界面很简单,一个全屏的listview,cell很简单,一个textview一个checkbox activity: package com.example.testlistviewandcheckbox; import java.util.ArrayList; import java.util.List; import

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI(转载)

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼ 您还未登录 ! 登录 注册 机遇&速度 博客 微博 相册 收藏 留言 关于我 android 仿微信聊天界面,以及语音录制功能 博客分类: android 录音 android 录音android 仿微信聊天界面android 仿微信录音UIandroidandroid 语音 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:     第一:chat.xml设计 Xml代码   <?xml version=&q

android内存优化5—对界面UI的优化(2)

在一个应用程序中,一般都会存在多个Activity,每个Activity对应着一个UI布局文件.一般来说,为了保持不同窗口之间的风格统一,在这些UI布局文件中,几乎肯定会用到很多相同的布局.如果我们在每个xml文件中都把相同的布局都重写一遍,一个是代码冗余,可读性很差:另一个是修改起来比较麻烦,对后期的修改和维护非常不利.所以,一般情况下,我们需要把相同布局的代码单独写成一个模块,然后在用到的时候,可以通过<include /> 标签来重用layout的代码. 常见的,有的应用在最上方会有一个

android内存优化4—对界面UI的优化(1)

在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多控件,控件会用到很多的资源.Android系统本身有很多的资源,包括各种各样的字符串.图片.动画.样式和布局等等,这些都可以在应用程序中直接使用.这样做的好处很多,既可以减少内存的使用,又可以减少部分工作量,也可以缩减程序安装包的大小. 下面从几个方面来介绍如何利用系统资源. 1)利用系统定义的id

android 仿微信聊天界面,以及语音录制功能

extends:http://104zz.iteye.com/blog/1709840 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:     第一:chat.xml设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" an

浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自动弹出搜索提示

对于通过用户输入关键词实现自动弹出相关搜索结果,这里本人给两种解决方案,用于两种不同的情形. 常见方法是在数据库里建一个用户搜索关系表,然后通过用户搜索框输入的关键字异步调用数据表中的相关数据,显示在一个隐藏div中. 第二种方式也就是我现在着重讨论的方式,适用于单个用户,基于此用户以往的搜索数据来实现搜索提示功能.技术关键是记录下用户的以往搜索数据,写入cookie,然后页面从用户本机cookie调用数据. ok,下面进入正题.本文主要讲实现步骤,代码可根据自己实际需要更改. 一,如何写入co

界面UI系统雏形

最近一直在做界面的灵活性,界面UI的设计可以说是一个永不褪色的话题,怎么说呢?首先给用户第一直观感受的肯定是你这款软件的界面设计好坏与否?所以界面UI应该予以重视. 界面UI系统的流程图: 第一步:页面模板,即动态生成页面 为什么需要动态生成页面呢?我们都知道一个JSP页面包括很多的信息,包括HTML表头.系统div块.显示数据的表格.添加/编辑的弹框.而这些都是每一个页面中都需要重复的.如何避免这些重复的代码,减少开发人员的工作量呢?这就引出了动态生成页面,即动态的创建业务页面,不需要手写HT

Android ListView CheckBox状态错乱(转)

转自:http://www.cnblogs.com/wujd/archive/2012/08/17/2635309.html listView中包含checkBox的时候,经常会发生其中的checkBox错乱的问题,大多时候的代码如下: 先看一下效果图:奇数行为选中状态,偶数行为非选中状态 具体代码: 布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:andro

仿百度壁纸client(五)——实现搜索动画GestureDetector手势识别,动态更新搜索keyword

仿百度壁纸client(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager + Fragment 仿百度壁纸client(二)--主页自己定义ViewPager广告定时轮播图 仿百度壁纸client(三)--首页单向.双向事件冲突处理,壁纸列表的实现 仿百度壁纸client(四)--自己定义上拉载入实现精选壁纸墙 仿百度壁纸client(五)--实现搜索动画Gesture