zoukankan      html  css  js  c++  java
  • 4.20日软件开发日记:今天我干了什么?

    今天尝试开始导入课表,并且学习删除,貌似有些不顺,但是结局是好的,还是可以用呀。

    package zzm.org.kebiaojiemian;
    import android.media.AudioManager;
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.database.Cursor;
    
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TabHost;
    import android.widget.TabWidget;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        private static String[] TB_NAME= new String[]{"Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"};
        public ListView list[] = new ListView[7];
        private TabHost tabs   = null;
        private TextView exitButton = null;
        private TextView setButton = null;
        public static DataBase db;
        public Cursor[] cursor=new Cursor[7];
        public SimpleCursorAdapter adapter;
        private SharedPreferences pre;
    
        //定义手势检测器实例
        private GestureDetector detector = null;
        //定义手势动作两点之间的最小距离
        private final int FLIP_DISTANCE = 200;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //将该activity加入到MyApplication对象实例容器中
            MyApplication.getInstance().addActivity(this);
    
            db=new DataBase(MainActivity.this);
            pre=getSharedPreferences("firstStart",Context.MODE_PRIVATE);
            /*
             * 判断程序是否第一次运行,如果是创建数据库表
             */
            if(pre.getBoolean("firstStart", true)){
                SingleInstance.createTable();
                (pre.edit()).putBoolean("firstStart",false).commit();
    //            finish();
            }
    
    
            exitButton = (TextView)findViewById(R.id.exitButton);
            setButton = (TextView)findViewById(R.id.setButton);
            list[0] = (ListView)findViewById(R.id.list0);
            list[1] = (ListView)findViewById(R.id.list1);
            list[2] = (ListView)findViewById(R.id.list2);
            list[3] = (ListView)findViewById(R.id.list3);
            list[4] = (ListView)findViewById(R.id.list4);
            list[5] = (ListView)findViewById(R.id.list5);
            list[6] = (ListView)findViewById(R.id.list6);
            tabs  = (TabHost)findViewById(R.id.tabhost);
            //创建手势检测器
            detector = new GestureDetector(this, new DetectorGestureListener());
    
            //在配置任何的TabSpec之前,必须在TabHost上调用该方法
            tabs.setup();
    
            //为主界面注册七个选项卡
            TabHost.TabSpec  spec = null;
            addCard(spec,"tag1",R.id.list0,"");
            addCard(spec,"tag2",R.id.list1,"");
            addCard(spec,"tag3",R.id.list2,"");
            addCard(spec,"tag4",R.id.list3,"");
            addCard(spec,"tag5",R.id.list4,"");
            addCard(spec,"tag6",R.id.list5,"");
            addCard(spec,"tag7",R.id.list6,"");
    
            //修改tabHost选项卡中的字体的颜色
            TabWidget tabWidget = tabs.getTabWidget();
            for(int i=0;i<tabWidget.getChildCount();i++){
                TextView tv = (TextView)tabWidget.getChildAt(i).findViewById(android.R.id.title);
                tv.setTextColor(0xff004499);
            }
    
            //设置打开时默认的选项卡是当天的选项卡
            tabs.setCurrentTab(ShareMethod.getWeekDay());
    
            //用适配器为各选项卡添加所要显示的内容
            for(int i=0;i<7;i++){
                cursor[i]=MainActivity.db.select(i);
                list[i].setAdapter(adapter(i));
            }
    
            //声明一个获取系统音频服务的类的对象
            final AudioManager audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE);
            //获取手机之前设置好的铃声模式,该数据将用来传递给activity_set
            final int orgRingerMode = audioManager.getRingerMode();
    
            //为退出按钮绑定监听器
            exitButton.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    //创建AlertDialog.Builder对象,该对象是AlterDialog的创建器,AlterDialog用来创建弹出对话框
                    final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    exit(builder);
                }
            });
    
            //为设置按钮绑定监听器
            setButton.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SetActivity.class);
                    //将orgRingerMode数据传给activity_set
                    intent.putExtra("mode_ringer", orgRingerMode);
                    startActivity(intent);
                }
            });
    
            for( int day=0;day<7;day++){
                //为七个ListView绑定触碰监听器,将其上的触碰事件交给GestureDetector处理
                //此监听器是必须的,不然滑动手势只在ListView下的空白区域有效,而在ListView上无效
                list[day].setOnTouchListener(new OnTouchListener() {
    
                    @Override
                    public boolean onTouch(View v, MotionEvent event)   {
                        return detector.onTouchEvent(event);
                    }
                });
                //为每个ListView的每个item绑定监听器,点击则弹出由AlertDialog创建的列表对话框进行选择
                list[day].setOnItemClickListener(new OnItemClickListener() {
    
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                                            final int id, long arg3) {
                        final int currentDay=tabs.getCurrentTab();
                        final int n=id;
                        final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setIcon(R.drawable.ic_launcher);
                        builder.setTitle("选择");
                        TextView tv=(TextView)arg1.findViewById(R.id.ltext0);
                        Log.i("Test",(tv.getText().toString().equals(""))+"");
                        //如果课程栏目为空就启动添加对话框
                        if((tv.getText()).toString().equals("")){
                            //通过数组资源为对话框中的列表添加选项内容,这里只有一个选项
                            builder.setItems(R.array.edit_options1, new DialogInterface.OnClickListener() {
    
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    //如果单击了该列表项,则跳转到编辑课程信息的界面
                                    if(which == 0){
                                        new MyDialog(MainActivity.this).add(currentDay,n);
                                    }
                                }
                            });
                            builder.create().show();
                        }
                        //否则启动修改对话框,或直接删除数据
                        else{
                            builder.setItems(R.array.edit_options2, new DialogInterface.OnClickListener() {
    
                                @SuppressWarnings("deprecation")
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    //如果单击了该列表项,则跳转到编辑课程信息的界面
                                    if(which == 0){
                                        new MyDialog(MainActivity.this).modify(currentDay,n);
                                    }
                                    if(which == 1){
                                        cursor[currentDay].moveToPosition(n);
                                        int n1=Integer.parseInt(cursor[currentDay].getString(7));//课程的总节数
                                        int n2=Integer.parseInt(cursor[currentDay].getString(8));//选中的为该课程的第几节
                                        switch(n2){
                                            case 0:
                                                for(int m=0;m<n1;m++){
                                                    MainActivity.db.deleteData(currentDay,n+m+1);
                                                }
                                                break;
    
                                            case 1:
                                                MainActivity.db.deleteData(currentDay,n);
                                                for(int m=1;m<n1;m++){
                                                    MainActivity.db.deleteData(currentDay,n+m);
                                                }
                                                break;
                                            case 2:
                                                MainActivity.db.deleteData(currentDay,n-1);
                                                MainActivity.db.deleteData(currentDay,n);
                                                for(int m=2;m<n1;m++){
                                                    MainActivity.db.deleteData(currentDay,n+m-1);
                                                }
                                                break;
                                            case 3:
                                                for(int m=n2;m>=0;m--){
                                                    MainActivity.db.deleteData(currentDay,n-m+1);
                                                }
                                                break;
                                            default:
                                                break;
                                        }
                                        cursor[currentDay].requery();
                                        list[currentDay].invalidate();
                                    }
                                }
                            });
                            builder.create().show();
                        }
                    }
                });
            }
    
        }
        //内部类,实现GestureDetector.OnGestureListener接口
        class DetectorGestureListener implements GestureDetector.OnGestureListener{
    
            @Override
            public boolean onDown(MotionEvent e) {
                return false;
            }
    
            //当用户在触屏上“滑过”时触发此方法
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                                   float velocityY) {
                int i = tabs.getCurrentTab();
                //第一个触点事件的X坐标值减去第二个触点事件的X坐标值超过FLIP_DISTANCE,也就是手势从右向左滑动
                if(e1.getX() - e2.getX() > FLIP_DISTANCE){
                    if(i<6)
                        tabs.setCurrentTab(i+1);
                    //    float currentX = e2.getX();
                    //    list[i].setRight((int) (inialX - currentX));
                    return true;
                }
    
                //第二个触点事件的X坐标值减去第一个触点事件的X坐标值超过FLIP_DISTANCE,也就是手势从左向右滑动
                else if(e2.getX() - e1.getX() > FLIP_DISTANCE){
                    if(i>0)
                        tabs.setCurrentTab(i-1);
                    return true;
                }
                return false;
            }
    
            @Override
            public void onLongPress(MotionEvent e) {
    
            }
    
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2,
                                    float distanceX, float distanceY) {
                return false;
            }
    
            @Override
            public void onShowPress(MotionEvent e) {
    
            }
    
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return false;
            }
    
        }
    
    
        //覆写Activity中的onTouchEvent方法,将该Activity上的触碰事件交给GestureDetector处理
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            return detector.onTouchEvent(event);
        }
    
        //设置菜单按钮
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    
        //当点击菜单中的“退出”键时,弹出提示是否退出的对话框
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            //创建AlertDialog.Builder对象,该对象是AlterDialog的创建器,AlterDialog用来创建弹出对话框
            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
            if(item.getItemId() == R.id.menu_exit){
                exit(builder);
                return true;
            }
            if(item.getItemId() == R.id.menu_settings){
                Intent intent = new Intent(MainActivity.this, SetActivity.class);
                startActivity(intent);
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
    
        //子 方法:为主界面添加选项卡
        public void addCard(TabHost.TabSpec spec,String tag,int id,String name){
            spec = tabs.newTabSpec(tag);
            spec.setContent(id);
            spec.setIndicator(name);
            tabs.addTab(spec);
        }
        //子方法:用来弹出是否退出程序的对话框,并执行执行是否退出操作
        public void exit(AlertDialog.Builder builder){
            //为弹出的对话框设置标题和内容
            builder.setIcon(R.drawable.ic_launcher);
            builder.setTitle("退出程序");
            builder.setMessage("确定要退出随身课程表吗?");
            //设置左边的按钮为“确定”键,并且其绑定监听器,点击后退出
            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //退出应用程序,即销毁地所有的activity
                    MyApplication.getInstance().exitApp();
                }
            });
            //设置右边的按钮为“取消”键,并且其绑定监听器,点击后仍然停留在当前界面
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            //创建并显示弹出的对话框
            builder.create().show();
        }
        /*
         * 为每一个list提供数据适配器
         */
        @SuppressWarnings("deprecation")
        public ListAdapter adapter(int i){
            return new SimpleCursorAdapter(this, R.layout.list_v2,cursor[i],new String[]{"_id","classes","location",
                    "teacher","zhoushu"},new int[]{R.id.number,R.id.ltext0,R.id.ltext1,R.id.ltext6,R.id.ltext7} );
        }
    
        /*
         * 第一次运行时创建数据库表
         */
        static class SingleInstance{
            static SingleInstance si;
            private SingleInstance(){
                for(int i=0;i<7;i++){
                    db.createTable(i);
                }
            }
            static SingleInstance createTable(){
                if(si==null)
                    return si=new SingleInstance();
                return null;
            }
        }
    }
  • 相关阅读:
    access denied for user 'root'@'localhost'(using password:YES) FOR WINDOWS
    PKU 1001解题代码
    PKU 1002解题总结
    为什么vue组件data必须是函数
    call 和 apply 区别
    CSS|Stacking context 堆叠上下文
    Vue3.0 tsx 函数组件
    js中的变量提升
    JavaEE|架构
    MVC,MVP 和 MVVM
  • 原文地址:https://www.cnblogs.com/sunhongbin/p/12780735.html
Copyright © 2011-2022 走看看