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>
  • 相关阅读:
    【leetcode】1020. Partition Array Into Three Parts With Equal Sum
    【leetcode】572. Subtree of Another Tree
    【leetcode】123. Best Time to Buy and Sell Stock III
    【leetcode】309. Best Time to Buy and Sell Stock with Cooldown
    【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
    【leetcode】467. Unique Substrings in Wraparound String
    【leetcode】823. Binary Trees With Factors
    【leetcode】143. Reorder List
    【leetcode】1014. Capacity To Ship Packages Within D Days
    【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60
  • 原文地址:https://www.cnblogs.com/yaowen/p/5156000.html
Copyright © 2011-2022 走看看