package com.itheima.mobileguard.fragment;

import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; import com.itheima.mobileguard.R;
import com.itheima.mobileguard.db.dao.AppLockDao;
import com.itheima.mobileguard.domain.AppInfo;
import com.itheima.mobileguard.engine.AppInfoParser;
import com.lidroid.xutils.DbUtils.DaoConfig; public class LockFragment extends Fragment { private ListView list_view;
private TextView tv_lock;
private List<AppInfo> lockLists;
private AppLockDao dao;
private LockAdapter adapter; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { View view = inflater.inflate(R.layout.item_lock_fragment, null);
list_view = (ListView) view.findViewById(R.id.list_view);
tv_lock = (TextView) view.findViewById(R.id.tv_lock);
return view;
} @Override
public void onStart() {// 每次页面可见就会调用这个方法
super.onStart();
// 拿到所有的应用程序
List<AppInfo> appInfos = AppInfoParser.getAppInfos(getActivity());
// 初始化一个加锁的集合 lockLists = new ArrayList<AppInfo>();
dao = new AppLockDao(getActivity());
for (AppInfo appInfo : appInfos) {
// 如果能找到当前的包名说明在程序锁的数据库里面
if (dao.find(appInfo.getPackname())) {
lockLists.add(appInfo);
} else {
}
}
adapter = new LockAdapter();
list_view.setAdapter(adapter);
} private class LockAdapter extends BaseAdapter {
@Override
public int getCount() {
tv_lock.setText("已加锁(" + lockLists.size() + ")个");
return lockLists.size();
} @Override
public Object getItem(int position) {
return lockLists.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final View view;
ViewHolder holder = null;
if (convertView == null) {
view = View.inflate(getActivity(), R.layout.item_lock, null);
holder = new ViewHolder();
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);
holder.tv_name = (TextView) view.findViewById(R.id.tv_name);
holder.iv_lock = (ImageView) view.findViewById(R.id.iv_lock);
view.setTag(holder);
} else {
view = convertView; holder = (ViewHolder) view.getTag();
}
final AppInfo appInfo = lockLists.get(position);
holder.iv_icon.setImageDrawable(appInfo.getIcon());
holder.tv_name.setText(appInfo.getName()); holder.iv_lock.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,//X的起始位置
Animation.RELATIVE_TO_SELF, -1.0f,//x的终止位置(左滑)
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
translateAnimation.setDuration(5000);
view.startAnimation(translateAnimation); new Thread() {
public void run() {
SystemClock.sleep(5000);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
dao.delete(appInfo.getPackname());
lockLists.remove(position);
adapter.notifyDataSetChanged();
}
});
};
}.start();
}
});
return view;
}
} static class ViewHolder {
ImageView iv_icon;
TextView tv_name;
ImageView iv_lock;
}
}

页面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/tv_lock"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </LinearLayout>

UnLockFragment

package com.itheima.mobileguard.fragment;

import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; import com.itheima.mobileguard.R;
import com.itheima.mobileguard.db.dao.AppLockDao;
import com.itheima.mobileguard.domain.AppInfo;
import com.itheima.mobileguard.engine.AppInfoParser;
//页面消失了再调用onStop()方法,onDestory()方法,不是调用onStop()方法,onDestory()方法再销毁页面。
public class UnLockFragment extends Fragment { private View view;
private TextView tv_unlock;
private ListView list_view;
private List<AppInfo> appInfos;
private AppLockDao dao;
private List<AppInfo> unLockLists;
private UnLockAdapter adapter; /*
* 类似activity里面的setContentView,初始化界面在onCreateView()方法中,
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { view = inflater.inflate(R.layout.item_unlock_fragment, null);
list_view = (ListView) view.findViewById(R.id.list_view);
tv_unlock = (TextView) view.findViewById(R.id.tv_unlock);
return view;
} //初始化数据要在onStart()方法中,因为onCreateView()方法只调用一次。
@Override
public void onStart() {
super.onStart();
appInfos = AppInfoParser.getAppInfos(getActivity()); // 获取到程序锁的dao
dao = new AppLockDao(getActivity());
// 初始化一个没有加锁的集合 unLockLists = new ArrayList<AppInfo>();
for (AppInfo appInfo : appInfos) {
// 判断当前的应用是否在程序所的数据里面
if (dao.find(appInfo.getPackname())) {
} else {
// 如果查询不到说明没有在程序锁的数据库里面
unLockLists.add(appInfo);
}
} adapter = new UnLockAdapter();
list_view.setAdapter(adapter);
} public class UnLockAdapter extends BaseAdapter { @Override
public int getCount() {//数量减少的时候会重新刷新,getCount()方法会执行,
tv_unlock.setText("未加锁(" + unLockLists.size() + ")个");
return unLockLists.size();
} @Override
public Object getItem(int position) {
return unLockLists.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder = null;
final View view;
final AppInfo appInfo;
if (convertView == null) {
view = View.inflate(getActivity(), R.layout.item_unlock, null);
/*<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1111"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:text="程序锁" />
<ImageView
android:id="@+id/iv_unlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/list_button_lock_default" />
</LinearLayout>*/
holder = new ViewHolder();
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);
holder.tv_name = (TextView) view.findViewById(R.id.tv_name);
holder.iv_unlock = (ImageView) view
.findViewById(R.id.iv_unlock);
view.setTag(holder);
} else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
// 获取到当前的对象
appInfo = unLockLists.get(position);
holder.iv_icon
.setImageDrawable(unLockLists.get(position).getIcon());
holder.tv_name.setText(unLockLists.get(position).getName());
// 把程序添加到程序锁数据库里面,添加一个位移动画。
holder.iv_unlock.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 初始化一个位移动画
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,//X轴的开始位置
Animation.RELATIVE_TO_SELF, 1.0f,//X轴的结束位置(右滑)
Animation.RELATIVE_TO_SELF, 0,//Y轴的开始位置
Animation.RELATIVE_TO_SELF, 0);//Y轴的结束位置
// 设置动画时间
translateAnimation.setDuration(5000);
// 开始动画,动画作用在整个View上面。
view.startAnimation(translateAnimation);
new Thread(){
public void run() {
SystemClock.sleep(5000);//动画是开启了子线城,不然这行代码就先执行了。
getActivity().runOnUiThread(new Runnable() {//刷新界面所有要在主线程执行
@Override
public void run() {
// 添加到数据库里面
dao.add(appInfo.getPackname());
// 从当前的页面移除对象
unLockLists.remove(position);
// 刷新界面
adapter.notifyDataSetChanged();
}
});
};
}.start();
}
});
return view;
}
} static class ViewHolder {
ImageView iv_icon;
TextView tv_name;
ImageView iv_unlock;
}
}

item_unlock_fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_unlock"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TextView>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>

android147 360 程序锁fragment的更多相关文章

  1. android147 360 程序锁

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. android149 360 程序锁输入密码

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. Android学习笔记_63_手机安全卫士知识点归纳(3)分享 程序锁 服务 进程管理 widget

    1.分享: Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setT ...

  4. Android项目实战_手机安全卫士程序锁

    ###1.两个页面切换的实现1. 可以使用Fragment,调用FragmentTransaction的hide和show方法2. 可以使用两个布局,设置visibility的VISIABLE和INV ...

  5. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  6. 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样...

    出错提示: 正尝试在 OS 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中增加了42种非常强大的调试助手 ...

  7. 检测到 LoaderLock:DLL"XXXX"正试图在OS加载程序锁内执行

    解决方法: ctrl+D+E或alt+ctl+e或使用菜单调试——>异常——>异常窗口——>Managed Debugging Assistants——>去掉LoaderLoc ...

  8. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码

    来自:http://www.cnblogs.com/lcxu2/archive/2011/01/16/2004016.html 正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或 ...

  9. Android安全问题 程序锁

    导读:本文介绍如何实现对应用加锁的功能,无须root权限 某些人有时候会有这样一种需求,小A下载了个软件,只是软件中的美女过于诱惑与暴露,所以他不想让别人知道这是个什么软件,起码不想让别人打开浏 览. ...

随机推荐

  1. Metaspace 之二--Java 8的元空间(metaspace)、metaspace监控方法

    很多开发者都在其系统中见过“java.lang.OutOfMemoryError: PermGen space”这一问题.这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的,通常出现于代码热部 ...

  2. linux交叉环境的搭建以及嵌入式开发概述

    嵌入式开发概述 由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发3大部分 在系统总体开发中,由于嵌入式系统与硬件依 ...

  3. Linux性能监控之Memory篇

    首先说说虚拟内存和物理内存: 虚拟内存就是采用硬盘来对物理内存进行扩展,将暂时不用的内存页写到硬盘上而腾出更多的物理内存让有需要的进程来用.当这些内存页需要用的时候在从硬盘读回内存.这一切对于用户来说 ...

  4. Centos yum源更新为阿里云

    阿里云镜像网址 http://mirrors.aliyun.com/   更新步骤 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d ...

  5. ASM中的别名

    在ASM中的别名,是为了方便管理. 在ASM中创建别名,一种是在RDBMS中创建,另外一种是在ASM中创建,区别就是在ASM中创建的别名,在RDBMS中是不可见的. 在RDBMS中创建别名: SQL& ...

  6. SqlHelper 带详细中文注释

    using System; using System.Collections.Generic; using System.Linq; using System.Text; //对数据库进行操作引入命名 ...

  7. Chapter3:字符串、向量和数组

    C++11新特性:范围for(range for) for (declaration: expression) statement vector和数组都是对象的集合,而引用不是对象. vector对象 ...

  8. AtCoder Grand Contest 001

    B - Mysterious Light 题意:从一个正三角形边上一点出发,遇到边和已走过的边则反弹,问最终路径长度 思路:GCD 数据爆long long #pragma comment(linke ...

  9. SQL中以count及sum为条件的查询

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  10. web.py网页模板中使用jquery

    由于$是web.py针对模板的保留字符,所以在模板文件内不能直接使用$("#id")的格式. 解决办法: 1.$$("#id")可以避免$被误解析 2.jque ...