Android接入WebView(一)——基本用法

Android接入WebView(二)——与JavaScript交互

Android接入WebView(三)——浏览器书签与历史记录与二维码分享

Android接入WebView(四)——浏览器书签与历史记录详细处理

Android接入WebView(五)——浏览器制作总结及源码分享

最近写了一个基于webview和zxing,sqlite实现的一款浏览器

主要功能有:扫描二维码以及打开本地二维码加载网页,书签和历史记录管理,无痕浏览,分享网址,分享网址二维码,浏览器出错自定义等功能。

源码地址:此资源解压后用Android可直接打开

 

前段时间很忙,现在终于有时间来写写书签和历史记录的详细处理了

由于书签处理和历史记录处理类似,我这里只写怎么处理历史记录,总共包含如下几个函数:

Android接入WebView(四)——浏览器书签与历史记录详细处理_第1张图片

实现的功能:显示历史记录并点击可进入,长按出现功能菜单,以及查看详细信息:

 Android接入WebView(四)——浏览器书签与历史记录详细处理_第2张图片      Android接入WebView(四)——浏览器书签与历史记录详细处理_第3张图片   Android接入WebView(四)——浏览器书签与历史记录详细处理_第4张图片

好了,现在说几个重要的,文末会给出全部代码

我们进入history Activity后,会显示最近浏览过的网址,按访问时间逆序排序,即最后访问的出现在最前面,这也符合大多数人的使用习惯。

这个函数实现的功能就是逆序查询数据库:

如果返回不为空,布尔变量if_exsit就置为true,再把返回数据绑定到listview上;

如果返回为空,布尔变量if_exsit就置为false,并把listview设置为默认的内容

map.put("title", "暂时没有浏览记录");map.put("url", "此处是存放您历史记录地方");
//数据库逆序查询函数:    public void queryinfo(){        final ArrayList> listItem = new ArrayList >();/*在数组中存放数据*/        //第二个参数是数据库名        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        //Cursor cursor = db.rawQuery("select * from bookmarkDB", null);        //查询语句也可以这样写        Cursor cursor = db.query("historyDB", null, null, null, null, null, "id desc");        if (cursor != null && cursor.getCount() > 0) {            if_exsit=true;            while(cursor.moveToNext()) {                get_id=cursor.getInt(0);//得到int型的自增变量                get_title = cursor.getString(1);                get_url = cursor.getString(2);                HashMap map = new HashMap();                map.put("title", get_title);                map.put("url", get_url);                arrayList.add(get_id);                listItem.add(map);                //new String  数据来源, new int 数据到哪去                SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,R.layout.list_item,                        new String[] {"title","url"},                        new int[] {R.id.textView2,R.id.textView3});                lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器            }        }        else {            if_exsit=false;            HashMap map = new HashMap();            map.put("title", "暂时没有浏览记录");            map.put("url", "此处是存放您历史记录地方");            listItem.add(map);            //new String  数据来源, new int 数据到哪去            SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,R.layout.item_list,                    new String[] {"title","url"},                    new int[] {R.id.textView2,R.id.textView3});            lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器        }        cursor.close();        db.close();    }

 

然后是删除数据后的处理:

删除数据后,我们要刷新一次UI,处理如下:

最后两行代码是清空与listview绑定的ArrayList,并且重新执行queryinfo()加载UI

 //删除函数:    public void delete(int position){        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        db.delete("historyDB","id=?",new String[] {String.valueOf(arrayList.get(position))});        db.close();        Toast.makeText(this,"删除成功",Toast.LENGTH_SHORT).show();        //删除后清空数组,重新放入数据,刷新UI        arrayList.clear();        queryinfo();    }

 

然后是点击listview,当if_exsit为true的时候才返回MainActivity加载网页:

if (if_exsit) {                    Intent mIntent = new Intent();//没有任何参数(意图),只是用来传递数据                    mIntent.putExtra("2_data_return", query_by_id(position));                    setResult(RESULT_OK, mIntent);                    finish();                }

 

然后是查看详细信息:

在history里面,详细信息显示为TextView,不可编辑,在bookmark里面,为EditText,可以编辑

//url详细信息对话框    public void url_infomation(final int position){        final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);        View view = View.inflate(this, R.layout.history_url_informatiom, null);        text_title = (TextView) view.findViewById(R.id.textView4);        text_url = (TextView) view.findViewById(R.id.textView5);        dialog.setContentView(view);        //使得点击对话框外部可消失对话框        dialog.setCanceledOnTouchOutside(true);        //设置对话框的大小        view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));        Window dialogWindow = dialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f);        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        lp.gravity = Gravity.CENTER;        dialogWindow.setAttributes(lp);        //显示详细信息        text_url.setText(query_by_id(position));        text_title.setText(titler);        dialog.show();    }

 

下面给出完整history Activity的代码:

package mountain_hua.browser;import android.app.Dialog;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.view.Gravity;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;/** * Created by dhs on 2018/7/27. */public class history extends AppCompatActivity {    private ListView lv;    private MyDatabaseHelper dbHelper;    private String get_title,get_url;//暂存从数据库得到的title和url    private int get_id; //暂存从数据库得到的id    private String titler, url;//按值查找详细信息    int id; //按值查找id    private TextView text_title, text_url;//书签详细信息edittext    private ArrayList arrayList=new ArrayList();    private boolean if_exsit;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.history);        lv=(ListView)findViewById(R.id.history_list);        queryinfo();        //点击函数:        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if (if_exsit) {                    Intent mIntent = new Intent();//没有任何参数(意图),只是用来传递数据                    mIntent.putExtra("2_data_return", query_by_id(position));                    setResult(RESULT_OK, mIntent);                    finish();                }            }        });        //长按选择删除        lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {                if (if_exsit)                dialog_bottom(position);                return true;            }        });    }    //删除函数:    public void delete(int position){        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        db.delete("historyDB","id=?",new String[] {String.valueOf(arrayList.get(position))});        db.close();        Toast.makeText(this,"删除成功",Toast.LENGTH_SHORT).show();        //删除后清空数组,重新放入数据,刷新UI        arrayList.clear();        queryinfo();    }    //全部删除    public void delete_all(){        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        Cursor cursor = db.rawQuery("select * from historyDB", null);        while (cursor.moveToNext()) {            id=cursor.getInt(0);            db.delete("historyDB","id=?",new String[] {String.valueOf(id)});        }        cursor.close();        db.close();        Toast.makeText(this,"删除成功",Toast.LENGTH_SHORT).show();        //删除后清空数组,重新放入数据,刷新UI        arrayList.clear();        queryinfo();    }    //全部删除对话框    public void delete_all_dialog(){        AlertDialog dialog = new AlertDialog.Builder(this)                .setTitle("确定全部删除吗?")//设置对话框的标题                //设置对话框的按钮                .setNegativeButton("取消", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                    }                })                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        delete_all();                        dialog.dismiss();                    }                }).create();        dialog.show();    }    //数据库逆序查询函数:    public void queryinfo(){        final ArrayList> listItem = new ArrayList >();/*在数组中存放数据*/        //第二个参数是数据库名        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        //Cursor cursor = db.rawQuery("select * from bookmarkDB", null);        //查询语句也可以这样写        Cursor cursor = db.query("historyDB", null, null, null, null, null, "id desc");        if (cursor != null && cursor.getCount() > 0) {            if_exsit=true;            while(cursor.moveToNext()) {                get_id=cursor.getInt(0);//得到int型的自增变量                get_title = cursor.getString(1);                get_url = cursor.getString(2);                HashMap map = new HashMap();                map.put("title", get_title);                map.put("url", get_url);                arrayList.add(get_id);                listItem.add(map);                //new String  数据来源, new int 数据到哪去                SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,R.layout.list_item,                        new String[] {"title","url"},                        new int[] {R.id.textView2,R.id.textView3});                lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器            }        }        else {            if_exsit=false;            HashMap map = new HashMap();            map.put("title", "暂时没有浏览记录");            map.put("url", "此处是存放您历史记录地方");            listItem.add(map);            //new String  数据来源, new int 数据到哪去            SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,R.layout.item_list,                    new String[] {"title","url"},                    new int[] {R.id.textView2,R.id.textView3});            lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器        }        cursor.close();        db.close();    }    //按值查找:    public String query_by_id(int position){        dbHelper = new MyDatabaseHelper(this,"usersDataBase",null,1);        SQLiteDatabase db = dbHelper.getWritableDatabase();        Cursor cursor = db.rawQuery("select * from historyDB", null);        while (cursor.moveToNext()) {            url = cursor.getString(2);            titler=cursor.getString(1);            id=cursor.getInt(0);            //找到id相等的就返回url            if (arrayList.get(position).equals(id))                break;        }        cursor.close();        db.close();        return url;    }    //url详细信息对话框    public void url_infomation(final int position){        final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);        View view = View.inflate(this, R.layout.history_url_informatiom, null);        text_title = (TextView) view.findViewById(R.id.textView4);        text_url = (TextView) view.findViewById(R.id.textView5);        dialog.setContentView(view);        //使得点击对话框外部可消失对话框        dialog.setCanceledOnTouchOutside(true);        //设置对话框的大小        view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));        Window dialogWindow = dialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f);        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        lp.gravity = Gravity.CENTER;        dialogWindow.setAttributes(lp);        //显示详细信息        text_url.setText(query_by_id(position));        text_title.setText(titler);        dialog.show();    }    //底部对话框    public void dialog_bottom(final int position){        //弹出对话框        final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);        View view = View.inflate(this, R.layout.history_dialog_bottom, null);        dialog.setContentView(view);        dialog.setCanceledOnTouchOutside(true);        view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));        Window dialogWindow = dialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        lp.gravity = Gravity.BOTTOM;        dialogWindow.setAttributes(lp);        dialog.show();        //点击事件        view.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //取消对话框                dialog.dismiss();            }        });        view.findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //删除制定position,并取消对话框                delete(position);                dialog.dismiss();            }        });        view.findViewById(R.id.lookup).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //查看、修改                dialog.dismiss();                url_infomation(position);            }        });        view.findViewById(R.id.clear_all).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //全部删除                dialog.dismiss();                delete_all_dialog();            }        });    }}

 

更多相关文章

  1. [Android 数据库] Android数据库总结
  2. Android数据存取之Databases
  3. Android下SQLite数据库编程学习系列之二---在Android下使用SQLit
  4. android 获取对话框关闭事件
  5. Android 自定义格式的对话框
  6. 搜索栏+流式布局+数据库
  7. android 一些数据转换方法
  8. android 工具类 数据库管理
  9. 清除app数据等同于设置中的清除数据

随机推荐

  1. Android自带的时间空间和日期控件
  2. 【Android】Android中 Paint 字体、粗细
  3. android 的多任务之道(个人渣水平,无责任
  4. Android处理后台返回数据——Json转实体
  5. android sdk+eclipse+adt 配置与开发
  6. ImageView 设置 maxWidth/maxHeight 和 a
  7. Android之NDK开发
  8. Android在shell环境下运行linux命令
  9. 一、Android基本常识——Android项目创建
  10. Android常用控件之悬浮窗