小白一枚,有些地方也是知其然不知其所以然,不当之处还望大神指正!

在自己做个android小程序时发现对数据的查询是必不可少的,而数据的显示用的最普遍的就是listview,看了看市面上大部分app实现起来都差不多,我也打算按这个套路来,但是仅仅实现了其基本功能,界面还是很丑很丑~

                


        


首先先贴上ListViewItem的xml

<?xml version="1.0" encoding="utf-8"?>                                                                                                 

我对TextView固定高度,不然CheckBox隐藏时大小会不一致;

对CheckBox设置了没有焦点,这样无法单独点击CheckBox,而是在编辑状态下点击Item的时候会对其响应;


接下来自定义一个适配器设置listview的每个条目内容

import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;public class MyAdapter extends BaseAdapter {    private Context context;    private List ls;             //这是一个自定义数据的链表,从Sqlite获取;    private LayoutInflater inflater = null;    public MyAdapter(Context c,List ls){    context=c;    this.ls=ls;    inflater = LayoutInflater.from(context);    }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn ls.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn ls.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;        if (convertView == null) {            holder = new ViewHolder();            convertView=inflater.inflate(R.layout.listviewitem,null);            holder.tv = (TextView) convertView.findViewById(R.id.item_tv);            holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);            convertView.setTag(holder);            }        else{        holder = (ViewHolder) convertView.getTag();        }        holder.tv.setText(ls.get(position).getWord().toString());        holder.cb.setChecked(ls.get(position).getFlag());        if(ls.get(position).getVisibility())            //改变checkbox的隐藏状态        holder.cb.setVisibility(View.VISIBLE);        else        holder.cb.setVisibility(View.GONE);        return convertView;}public final class ViewHolder{        TextView tv;        public CheckBox cb;    }}

Activity代码

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;public class Selectword extends Activity {private DBmanage helper;private ListView lv;private Button edit;private Button all;private Button notall;private Button delete;private MyAdapter ap;private List ls;private int checkNum=0;//选中计数private boolean editsta=false;//判断是否为编辑状态,默认 全选,全不选,删除 按键隐藏@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.selectwords);lv=(ListView)findViewById(R.id.selectlv);all=(Button)findViewById(R.id.select_all);notall=(Button)findViewById(R.id.select_notall);edit=(Button)findViewById(R.id.select_edit);delete=(Button)findViewById(R.id.select_delete);helper=new DBmanage(this);ls=helper.selectview();//由自定义函数从SQLITE获取数据链表ap=new MyAdapter(this,ls);lv.setAdapter(ap);edit.setText("编辑");edit.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubeditsta=!editsta;//改变编辑状态for (int i = 0; i < ls.size(); i++) {                    ls.get(i).putVisibility(editsta);                    ls.get(i).putFlag(false);                }checkNum = 0;ap.notifyDataSetChanged();//更新显示if(editsta){//改变按钮的隐藏状态all.setVisibility(View.VISIBLE);notall.setVisibility(View.VISIBLE);delete.setVisibility(View.VISIBLE);}else{all.setVisibility(View.GONE);notall.setVisibility(View.GONE);delete.setVisibility(View.GONE);}}});all.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubfor (int i = 0; i < ls.size(); i++) {                    ls.get(i).putFlag(true);                }                checkNum = ls.size();                ap.notifyDataSetChanged();        }});notall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubfor (int i = 0; i < ls.size(); i++) {                    ls.get(i).putFlag(false);                }                checkNum = 0;                ap.notifyDataSetChanged();        }});delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDialog();                    //确定删除对话框}});lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubif(editsta){//单击Item时判断当前编辑状态ViewHolder hoder=(ViewHolder) view.getTag();hoder.cb.toggle();if(hoder.cb.isChecked()){ls.get(position).putFlag(true);checkNum++;}else{ls.get(position).putFlag(false);checkNum--;}}else{//单击Item转到其他界面....}}});}private void Dialog(){AlertDialog.Builder builder=new Builder(Selectword.this);builder.setMessage("已选择"+checkNum+"项\n确定删除?");builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.dismiss();List list=new ArrayList();for (int i = 0; i < ls.size(); i++) {                    if(ls.get(i).getFlag()){                    list.add(ls.get(i).getNo());                    ls.remove(i);                    i--;                    }                }if(list.size()>0){helper.delete(list);  //由自定义函数对sqlite执行删除操作checkNum = 0;                ap.notifyDataSetChanged(); }}});builder.setNegativeButton("No", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.dismiss();}});builder.create().show();}}

总结:layout感觉还是不会写,一开始排的很乱,现在也很难看;适配器的部分第一次接触目前也是比着葫芦画瓢以后还得深入学习;目前只想做出对数据的增删改查,但是若有别的需求在这个基础上怎么改我觉得也得挺麻烦;总之,目前只是将就着能用,代码只是让我能想起来写的时候是怎么想的,随着不断的改进代码应该也会不断优化。


更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)Studio3.6中文乱码问题总结(build窗口乱码,编辑器乱
  5. Android(安卓)面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
  6. android adapter的学习
  7. UI开发中所用到特殊方法
  8. android通过浏览器得到手机数据
  9. android 微信支付接口申请分享

随机推荐

  1. android中的Mediaplayer------可以同时打
  2. 安卓学习笔记(一)、使用application传递数
  3. Android触碰事件
  4. Android在SurfaceView做动画一般方法
  5. Android(安卓)页面滑动切换
  6. Android(安卓)返回键监听
  7. Android---16---EditText中输入特定的字
  8. listview使用BaseAdapter显示图片和文字
  9. 简单有效的ItemDecoration--分割线
  10. Getting Started with Qt5 for Android