zoukankan      html  css  js  c++  java
  • android147 360 程序锁fragment

       

    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>
  • 相关阅读:
    分页内存管理——虚拟地址到物理地址的转换【转】
    设备树(device tree)学习笔记【转】
    08 在设备树里描述platform_device【转】
    [dts]Device Tree机制【转】
    设备树快速入门【转】
    Linux 设备树详解【转】
    设备树处理之——device_node转换成platform_device【转】
    最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】
    基于tiny4412的Linux内核移植 --- aliases节点解析【转】
    Linux 文件系统IO性能优化【转】
  • 原文地址:https://www.cnblogs.com/yaowen/p/5156000.html
Copyright © 2011-2022 走看看