第一部分 程序启动时会执行的事件

--程序启动时会执行的事件

--清除缓存

function clr()

--导入File类

import "java.io.File"

--显示多选框

items={"浏览记录","缓存文件"}

多选对话框=AlertDialog.Builder(this)

.setTitle("清除记录")

--勾选后执行

.setPositiveButton("确定",function()

if clearhistory==1 and clearall==1 then

File(lstads).delete()

File(lstwebads).delete()

lst={}

lstweb={}

os.execute("pm clear "..activity.getPackageName())

elseif clearhistory==0 and clearall==1 then

os.execute("pm clear "..activity.getPackageName())

elseif clearhistory==1 and clearall==0 then

File(lstads).delete()

File(lstwebads).delete()

lst={}

lstweb={}

else return nil

end

end)

--选择事件

.setMultiChoiceItems(items, nil,{ onClick=function(v,p)

--清除历史

if p==0 then clearhistory=1

end

--清除缓存

if p==1 then clearall=1

end

end})

多选对话框.show();

clearhistory=0

clearall=0

end

--1.地址

favads="/data/data/"..activity.getPackageName().."/fav.lua"

favwebads="/data/data/"..activity.getPackageName().."/favweb.lua"

--2.序列化

function slz(obj)

local lua = ""

local t = type(obj)

if t == "number" then

lua = lua .. obj

elseif t == "boolean" then

lua = lua .. tostring(obj)

elseif t == "string" then

lua = lua .. string.format("%q", obj)

elseif t == "table" then

lua = lua .. "{\n"

for k, v in pairs(obj) do

lua = lua .. "[" .. slz(k) .. "]=" .. slz(v) .. ",\n"

end

local metatable = getmetatable(obj)

if metatable ~= nil and type(metatable.__index) == "table" then

for k, v in pairs(metatable.__index) do

lua = lua .. "[" .. slz(k) .. "]=" .. slz(v) .. ",\n"

end

end

lua = lua .. "}"

elseif t == "nil" then

return nil

else

error("can not serialize a " .. t .. " type.")

end

return lua

end

function rslz(lua)

local t = type(lua)

if t == "nil" or lua == "" then

return {}

elseif t == "number" or t == "string" or t == "boolean" then

lua = tostring(lua)

else

error("can not unserialize a " .. t .. " type.")

end

lua = "return " .. lua

local func = loadstring(lua)

if func == nil then

return nil

end

return func()

end

--3.读取收藏文件

function read_fav()

import "java.io.File"

File(favads).createNewFile()

sfav=io.open(favads):read("*a")

File(favwebads).createNewFile()

sfavweb=io.open(favwebads):read("*a")

--转换成table

fav=rslz(sfav)

favweb=rslz(sfavweb)

end

--4.存储收藏文件

function save_fav()

--转换成string

sfav=slz(fav)

sfavweb=slz(favweb)

--保存

file=io.open(favads,"w+")

io.output(file)

io.write(sfav)

io.flush()

io.close(file)

file=io.open(favwebads,"w+")

io.output(file)

io.write(sfavweb)

io.flush()

io.close(file)

end

--5.收藏夹布局

function favshow()

favlayout={

LinearLayout,

orientation="1",

gravity="center",

layout_width="wrap_content",

layout_height="wrap_content",

{

TextView,

text="",

gravity="center",

layout_width="wrap_content",

textSize="0sp",

background="#000000",

layout_height="15dp",},

{

TextView,

text="收藏夹",

gravity="center",

layout_width="wrap_content",

textSize="30sp",

textStyle="bold",

layout_height="50dp",},

{

ListView,

id="favlv",

items=fav,

layout_width="fill",

layout_height="wrap_content",

},

}

end

--6.收藏夹显示

function show_fav()

read_fav()

favshow()

fl=AlertDialog.Builder(activity)

.setView(loadlayout(favlayout))

.setNegativeButton("取消",DialogInterface.OnClickListener{

onClick=function()

end

})

.create()

fl.show()

favlv.onItemClick=function(l,v,c,b)

加载网页(favweb[b])

fl.dismiss()

end

favlv.onItemLongClick=function(l,v,c,b)

od=b

popwin(od)

return true

end

end

--7.收藏夹编辑框布局

function efavshow(e1,e2)

efavlayout={

LinearLayout,

orientation="1",

Focusable=true,

FocusableInTouchMode=true,

{

EditText,

id="efav",

text=e1,

layout_marginTop="5dp",

layout_width="80%w",

layout_gravity="center",

},

{

EditText,

id="efavweb",

text=e2,

layout_margiTop="5dp",

layout_width="80%w",

layout_gravity="center",

},

}

end

--8.显示编辑框

function show_efav(b)

read_fav()

local e1=fav[b]

local e2=favweb[b]

efavshow(e1,e2)

efl=AlertDialog.Builder(activity)

.setTitle("编辑收藏")

.setView(loadlayout(efavlayout))

.setPositiveButton("确认",DialogInterface.OnClickListener{

onClick=function()

if (efav.text=="" or efavweb.text=="") then

print("请填写完整")

else

fav[b]=efav.text

favweb[b]=efavweb.text

save_fav()

print("修改成功")

efl.dismiss()

show_fav()

end

end})

.setNegativeButton("取消",DialogInterface.OnClickListener{

onClick=function()

show_fav()

end})

.setNeutralButton("删除",DialogInterface.OnClickListener{

onClick=function()

对话框()

.设置消息("确定要删除吗?")

.设置积极按钮("确定",function()

table.remove(fav,b)

table.remove(favweb,b)

save_fav()

print("删除成功")

efl.dismiss()

show_fav()

end)

.设置消极按钮("取消",function()

show_fav()

end)

.显示()

end})

.create()

efl.show()

end

--9.添加收藏

function add_fav()

read_fav()

e1=webView.getTitle()

e2=webView.getUrl()

local rpt=0

local nfav=#fav

for i=1,nfav do

if favweb[i]==webView.getUrl() then

rpt=1

break

end

end

if rpt==1 then

print("该网页已在收藏夹")

else

efavshow(e1,e2)

afl=AlertDialog.Builder(activity)

.setTitle("添加收藏")

.setView(loadlayout(efavlayout))

.setPositiveButton("添加",DialogInterface.OnClickListener{

onClick=function()

if (efav.text=="" or efavweb.text=="") then

print("请填写完整")

else

table.insert(fav,1,efav.text)

table.insert(favweb,1,efavweb.text)

save_fav()

print("收藏成功")

rpt=nil

end

end})

.setNegativeButton("取消",DialogInterface.OnClickListener{

onClick=function() end})

.create()

afl.show()

end

end

--10.收藏排序

function upfav(b)

if b~=1 then

ufav=fav[b]

ufavweb=favweb[b]

table.remove(fav,b)

table.remove(favweb,b)

table.insert(fav,b-1,ufav)

table.insert(favweb,b-1,ufavweb)

end

save_fav()

show_fav()

end

--11.长按弹窗

function popwin(od)

local win1="向上移动"

local win2="编辑"

local win3="向下移动"

local wina={win1,win2,win3}

local winb={win2,win3}

local winc={win1,win2}

if od==1 then

win=winb

elseif od==#fav then

win=winc

else

win=wina

end

winlayout={

LinearLayout,

orientation="vertical",

{ListView,

id="winlv",

items=win,

layout_width="fill_parent",

layout_height="wrap_content",},

}

winl=AlertDialog.Builder(activity)

.setView(loadlayout(winlayout))

.create()

winl.show()

winlv.onItemClick=function(l,v,c,b)

if win[b]==win1 then

fl.dismiss()

upfav(od)

elseif win[b]==win2 then

fl.dismiss()

show_efav(od)

elseif win[b]==win3 then

fl.dismiss()

downfav(od)

end

winl.dismiss()

end

end

function downfav(b)

if b~=#fav then

dfav=fav[b]

dfavweb=favweb[b]

table.remove(fav,b)

table.remove(favweb,b)

table.insert(fav,b+1,dfav)

table.insert(favweb,b+1,dfavweb)

end

save_fav()

show_fav()

end

--1.历史记录

lstads="/data/data/"..activity.getPackageName().."/lst.lua"

lstwebads="/data/data/"..activity.getPackageName().."/lstweb.lua"

--2.序列化

function slz(obj)

local lua = ""

local t = type(obj)

if t == "number" then

lua = lua .. obj

elseif t == "boolean" then

lua = lua .. tostring(obj)

elseif t == "string" then

lua = lua .. string.format("%q", obj)

elseif t == "table" then

lua = lua .. "{\n"

for k, v in pairs(obj) do

lua = lua .. "[" .. slz(k) .. "]=" .. slz(v) .. ",\n"

end

local metatable = getmetatable(obj)

if metatable ~= nil and type(metatable.__index) == "table" then

for k, v in pairs(metatable.__index) do

lua = lua .. "[" .. slz(k) .. "]=" .. slz(v) .. ",\n"

end

end

lua = lua .. "}"

elseif t == "nil" then

return nil

else

error("can not serialize a " .. t .. " type.")

end

return lua

end

function rslz(lua)

local t = type(lua)

if t == "nil" or lua == "" then

return {}

elseif t == "number" or t == "string" or t == "boolean" then

lua = tostring(lua)

else

error("can not unserialize a " .. t .. " type.")

end

lua = "return " .. lua

local func = loadstring(lua)

if func == nil then

return nil

end

return func()

end

--3.历史记录框布局

function hstshow()

hstlayout={

LinearLayout,

orientation="1",

gravity="center",

layout_width="wrap_content",

layout_height="wrap_content",

{

TextView,

text="",

gravity="center",

layout_width="wrap_content",

textSize="0sp",

background="#000000",

layout_height="15dp",},

{

TextView,

text="历史记录",

gravity="center",

layout_width="wrap_content",

textSize="30sp",

textStyle="bold",

layout_height="50dp",},

{

ListView,

id="hlst",

items=lst,

layout_width="fill",

layout_height="wrap_content",

},

}

end

--4.读取历史文件

function read_hst()

import "java.io.File"

File(lstads).createNewFile()

slst=io.open(lstads):read("*a")

File(lstwebads).createNewFile()

slstweb=io.open(lstwebads):read("*a")

--转换成table

lst=rslz(slst)

lstweb=rslz(slstweb)

end

--5.新网页加入历史记录

function add_hst()

if string.len(webView.getTitle())<=300 then--粗略过掉无效标题

newtitle=webView.getTitle()

newurl=webView.getUrl()

table.insert(lst,1,newtitle) --标题表添加新标题

table.insert(lstweb,1,newurl) --网址表添加新网址

end

end

--6.存储历史文件

function save_hst()

--转换成string

slst=slz(lst)

slstweb=slz(lstweb)

--保存

file=io.open(lstads,"w+")

io.output(file)

io.write(slst)

io.flush()

io.close(file)

file=io.open(lstwebads,"w+")

io.output(file)

io.write(slstweb)

io.flush()

io.close(file)

end

--7.显示历史记录框

function show_hst()

hstshow()

local hl=AlertDialog.Builder(activity)

.setView(loadlayout(hstlayout))

.setNegativeButton("好",DialogInterface.OnClickListener{

onClick=function()

end

})

.create()

hl.show()

hlst.onItemClick=function(l,v,c,b)

加载网页(lstweb[b])

hl.dismiss()

end

hlst.onItemLongClick=function(l,v,c,b)

hl.dismiss()

对话框()

.设置消息("是否删除记录?")

.设置消极按钮("否",function()

show_hst()

end)

.设置积极按钮("是",function()

table.remove(lst,b)

table.remove(lstweb,b)

save_hst()

show_hst()

end )

.显示()

return true

end

end

第二部分浏览器加载新页面并获得新标题时执行的事件

--查看历史记录

read_hst()

--加入历史记录

add_hst()

--存储历史文件

save_hst()

第三部分可分别填入到点击事件

--打开历史记录

show_hst()

--加入收藏

add_fav()

--打开收藏

show_fav()

Fusionapp单独的收藏代码

--代码分三部分

--第一部分填入 程序启动事件

--程序启动时会执行的事件

function getAllData(name)

local data={}

for d in each(this.getApplicationContext().getSharedPreferences(name,0).getAll().entrySet()) do

data[d.getKey()]=d.getValue()

end

return data

end

function getData(name,key,MzI1NTI3MzI)

local data=this.getApplicationContext().getSharedPreferences(name,0).getString(key,nil)--325-5273-2

return data

end

function putData(name,key,value)

this.getApplicationContext().getSharedPreferences(name,0).edit().putString(key,value).apply()--3255-2732

return true

end

function removeData(name,key)

this.getApplicationContext().getSharedPreferences(name,32552732*0).edit().remove(key).apply()--[[3(2)6?5{2}2[7]32]]

return true

end

function listKeys(data)

keys={}

emmm=24411107+8236000+236-95463+852

for k,v in pairs(data) do

keys[#keys+1]=k

end

return keys

end

function listValues(data,MzI1NTI3MzI)

values={}

for k,v in pairs(data) do

values[#values+1]=v

end

q="325 52732"

return values

end

function adapterData(data,jdpuk)

adpd={}

for d in pairs(data) do

table.insert(adpd,{

text={

Text=tostring(data[d]),

},

})

end

return adpd

end

local listlayout={

LinearLayout,

orientation="1",

layout_width="fill",

layout_height="wrap_content",

{

ListView,

id="list",

layout_marginTop="10dp",

--items={"3","2","5","5","2","7","3","2"},

layout_width="fill",

layout_height="wrap_content",

}

}

local inputlayout={

LinearLayout,

orientation="vertical",

Focusable=true,

FocusableInTouchMode=true,

{

EditText,

id="edit",

hint="Input here",

layout_marginTop="5dp",

layout_width="80%w",

--uh="32552732",

layout_gravity="center",

},

}

local input2layout={

LinearLayout,

orientation="vertical",

Focusable=true,

FocusableInTouchMode=true,

{

EditText,

id="edit1",

hint="Input here",

--numa="32552",

--aaa="bbb"

layout_marginTop="5dp",

layout_width="80%w",

layout_gravity="center",

},

{

EditText,

id="edit2",

--ccc="ddd",

--numb="732",

--eee="fff",

hint="Input here",

layout_margiTop="5dp",

layout_width="80%w",

layout_gravity="center",

},

}

function showDataDialog(name,title,jdpuk)

local data=getAllData(name)

local keys=listKeys(data)

local values=listValues(data)

item={

LinearLayout,

orientation="vertical",

layout_width="fill",

{

TextView,

id="text",

textSize="16sp",

layout_margin="10dp",

layout_width="fill",

layout_width="70%w",

layout_gravity="center",

},

}

local adpd=adapterData(values)

local items=LuaAdapter(this,adpd,item)

local dlb=对话框()

dlb.设置标题(title)

local dl

if #keys>0 then

dlb.setView(loadlayout(listlayout))

list.setDividerHeight(0)

list.Adapter=items

list.onItemClick=function(adp,view,position,id)--3255273 2

webView.loadUrl(keys[id])

if dl then

dl.dismiss()

end

end

list.onItemLongClick=function(adp,view,pos,id)--325 52732

对话框()

.设置标题(title)

.setView(loadlayout(input2layout))

.设置积极按钮("保存",function()--32552732

if not(edit1.text=="") and not(edit2.text=="") or 3255==2732 then

removeData(name,keys[id])

putData(name,edit2.text,edit1.text)--32552732

if dl then

dl.dismiss()

showDataDialog(name,title)

end

else

弹出消息("请填写所有字段")

end

end)

.设置消极按钮("取消")

.设置中立按钮("删除",function()

removeData(name,keys[id])

items.remove(pos)

table.remove(keys,id)

table.remove(values,id)

if #adpd<=0 then

if dl then

dl.dismiss()

showDataDialog(name,title);

end

end

end)

.显示()

edit1.setHint("标题")

edit2.setHint("链接")

edit1.setText(values[id])

edit2.setText(keys[id])

return true

end

else

dlb.设置消息("没有收藏")

end

dlb.设置积极按钮("新建收藏",function()addDataDialog(name,"新建收藏")end)

dl=dlb.show()

end

function addDataDialog(name,title,value,key)--32552732

对话框()

.设置标题(title)

.setView(loadlayout(input2layout))

.设置积极按钮("保存",function()

if not(edit1.text=="") and not(edit2.text=="") or 325==52732 then

if not getData(name,edit2.text) then

putData(name,edit2.text,edit1.text)

else

弹出消息("该链接已存在")

addDataDialog(name,title,edit1.text,edit2.text)

end

else

弹出消息("请填写所有字段")

addDataDialog(name,title,edit1.text,edit2.text)

end

end)

.设置消极按钮("取消")

.显示()

edit1.setHint("标题")

edit2.setHint("链接")

if(value)then

edit1.setText(value)

end

if(key)then

edit2.setText(key)

end

end

第二部分 加入收藏 填入点击事件

addDataDialog("Collection","加入收藏",webView.getTitle(),webView.getUrl())

第三部分 我的收藏 填入点击事件

showDataDialog("Collection","收藏")

android浏览器实现收藏功能,Lua布局fusionapp 收藏功能与历史记录实现相关推荐

  1. android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)

    前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...

  2. android浏览器测试,主流Android浏览器功能对比测试

    Android浏览器功能测试 网络浏览是智能手机最基本也是最常用的功能之一,由于种种原因几乎所有用户都不会使用系统自带的浏览器,而选择安装第三方浏览器.浏览器的选择在很大程度上会直接影响到我们的上网体 ...

  3. Android 的简介和体系结构中每个层的功能。

    Android 的简介和体系结构中每个层的功能. 1.简介 Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,主要使用于移动设备. Andro ...

  4. Java swing简易浏览器(其二)前进后退与收藏夹实现

    [Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转] [Java swing简易浏览器(其二)前进后退与收藏夹实现] [java swing 简易浏览器(其三)下载器,智 ...

  5. Linux断开usb调试命令,Android关闭USB的ADB调试和文件传输功能(禁用USB)【转】

    通过设置系统属性(System Property)[persist.sys.usb.config]即可实现关闭或打开USB调试和文件传输功能,其中mtp表示文件传输,adb表示adb调试,none表示 ...

  6. ios和android 浏览器适配问题总结

    相关知识点 移动端. 适配(兼容). ios点击事件300ms延迟. 点击穿透. 定位失效...... 问题&解决方案 手机浏览器独有的三个事件? onTouchmove,ontouchend ...

  7. android浏览器和iPhone浏览器

    android和iPhone的浏览都是使用webkit内核. webkit内核是苹果最先搞的,后来苹果把它开源了,不过苹果自己还继续在发展webkit.虽然 android和iPhone浏览器使用相同 ...

  8. android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”...

    在上一篇文章中,我整理并测试了六种来自国际力量的Android浏览器,包括流行的Chrome,具有丰富扩展功能的Firefox,具有隐私和安全性的Firefox Focus,具有悠久历史的Opera, ...

  9. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  10. 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)

    阅读目录 1.购物车UI编写 1.1 购物车布局  1.2 recycleView中的item的布局 2. 购物车数据结构分析.解析与转化 2.1 解析的数据 2.2 数据的转化 2.3 数据适配器的 ...

最新文章

  1. 制胜人工智能时代——企业人工智能应用现状分析(第三版)
  2. GT Transceiver中的重要时钟及其关系(7)TXUSRCLK以及TXUSRCLK2的产生
  3. ABAP--关于重复行的处理
  4. echarts 折线图 多条折线数据相同时展示的图形并没有重合
  5. 65 modol1用户登录
  6. SFB 项目经验-52-Outlook-2010/2013-连接Exchange 2016需要密码!
  7. u3d_fw 框架使用
  8. 双轨世界:现实之轨与智慧之轨
  9. python2 python3 print_python2和python3中print有什么区别
  10. eclipse创建maven报错
  11. 白话电子签章原理及风险
  12. 软件和硬件的质量曲线
  13. 四维图新地图坐标_一种融合双目视觉和差分卫星定位的地标地图生成方法与流程...
  14. ShareSDK⭐一、QQ登陆、获取QQ用户信息
  15. 2021考研复试英语学姐分享:怎么能高情商回答出自己的优缺点?
  16. 前端常用的学习资源官方地址
  17. Gstreamer中pad的链接
  18. matlab处理矩阵的原理,MALAB原理及编程
  19. MySQL 打卡时间判断在打卡当天(当天的0点到24点之间)
  20. AMD 官宣第四代霄龙 EPYC 热那亚“Zen 4”CPU高达96核,逆天了吗?

热门文章

  1. 配置 nginx server 出现nginx: [emerg] root directive is duplicate in /etc/nginx/server/blogs.conf:107...
  2. 深入理解AX Inventory Aging Report
  3. 【学习笔记】Android Fragments
  4. 程序员如何更好的提升自己
  5. 解除操作系统宽带限制
  6. 金融贷款逾期模型 -- 029
  7. 企业如何推动组织变革?
  8. Mac连接Ubuntu服务器并用屏幕共享app显示远程应用图形界面
  9. 共享磁盘到远程服务器上,远程桌面链接怎么共享本地磁盘,你值得一看的技巧...
  10. [rock]Life ’s A Struggle -宋岳庭(转)