zoukankan      html  css  js  c++  java
  • Android学习笔记——Day4

    13)ListView用法:
    i、继承Activity
    A、一个选项一个值
    public class List1 extends Activity {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 手工创建一个ListView对象
            ListView listView = new ListView(this);
            // 声明数据数组
            /*String[] info = {"a","b","c","d","e","f","g","h","i"};
            // 创建一个ArrayAdapter,传递数组的值
            ArrayAdapter<String> adapter =
                new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
            // 把ArrayAdapter作为适配器传递给ListView
            listView.setAdapter(adapter);
            this.setContentView(listView);*/
           
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.degree,android.R.layout.simple_list_item_1);
            listView.setAdapter(adapter);
            this.setContentView(listView);
        }
    }
    B、一个选项两个值
    public class List2 extends Activity {
        // 先声明一个ArrayList<Map<String,Object>>
        private ArrayList<Map<String, Object>> data;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 加载数据
            loadData();
            ListView listView = new ListView(this);
            //关键代码**********
            SimpleAdapter adapter = new SimpleAdapter(this, data,
                    android.R.layout.simple_list_item_2,
                    new String[] { "名字", "电话" }, new int[] { android.R.id.text1,
                            android.R.id.text2 });
            listView.setAdapter(adapter);
            // 为ListView注册监听器
            listView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // TODO Auto-generated method stub
                    // setTitle(parent.getItemAtPosition(position).toString());
                    // setTitle(position+"          "+id);
                    Map<String, Object> map = data.get(position);
                    String sex = (String) map.get("性别");
                    setTitle("当前客户性别为:" + sex);
                }
            });
            setContentView(listView);
        }

        private void loadData() {
            data = new ArrayList<Map<String, Object>>();
            Map<String, Object> map1 = new HashMap<String, Object>();
            map1.put("名字", "joe");
            map1.put("电话", "13788888888");
            map1.put("性别", "男");
            Map<String, Object> map2 = new HashMap<String, Object>();
            map2.put("名字", "tom");
            map2.put("电话", "13766666666");
            map2.put("性别", "女");
            data.add(map1);
            data.add(map2);
        }
    }
    ii、继承ListActivity,采用这种方式不需让ListActivity手动注册什么监听器,直接覆盖父类的onListItemClick方法就可以了
    public class List3 extends ListActivity {
        private ArrayList<Map<String, Object>> data;
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            loadData();
            SimpleAdapter adapter = new SimpleAdapter(this, data,
                    android.R.layout.simple_list_item_2,
                    new String[] { "名字", "性别" }, new int[] { android.R.id.text1,
                            android.R.id.text2 });
            this.setListAdapter(adapter);
        }
        protected void onListItemClick(ListView l, View v, int position, long id) {
            Map<String, Object> map = data.get(position);
            String tel = (String) map.get("电话");
            setTitle("当前客户电话为:" + tel);
        }
        private void loadData() {
            data = new ArrayList<Map<String, Object>>();
            Map<String, Object> map1 = new HashMap<String, Object>();
            map1.put("名字", "joe");
            map1.put("电话", "13788888888");
            map1.put("性别", "男");
            Map<String, Object> map2 = new HashMap<String, Object>();
            map2.put("名字", "tom");
            map2.put("电话", "13766666666");
            map2.put("性别", "女");
            data.add(map1);
            data.add(map2);
        }
    }

    14)对话框:Dialog是一切对话框的基类,需要注意的是,Dialog虽然可以在界面中显示,但是并非继承于习惯的View类,而是直接从Object继承,类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity维护,Activity负责生成,保存,恢复它.在生命周期的每个阶段都有一些回调方法供系统反向调用.
    AlertDialog是Dialog的一个子类,AlertDialog也是Android系统中最常用的对话框之一.一个AlertDialog可以有2个到3个按钮,可以对一个AlertDialog设置title以及Message.不能直接通过AlertDialog的构造参数生成一个AlertDialog,而是通过它的一个静态内部类AlertDialog.Builder来构造的,如:

    使用AlertDialog:
    AlertDialog类是Dialog类的子类。它默认提供了3个按钮和一个文本消息。这些按钮可以按需要来使他们显示或隐藏。下列代码将创建一个AlertDialog对话框,对话框上将向用户展示一个问题以及备选的yes/no答案:
    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setMessage(”Do you play cricket?”);
    dialog.setButton(”Yes”, myOnClickListener);
    dialog.setButton2(”No”, myOnClickListener);
    dialog.show();

    myOnClickListener这个事件监听器的代码可以类似如下:

    public void onClick(DialogInterface dialog, int i) {
    switch (i) {
    case AlertDialog.BUTTON1:

    break;
    case AlertDialog.BUTTON2:

    break;
    }
    }

    AlertDialog.Builder:
    AlertDialog类中有一个内部类,名为‘Builder’,Builder类提供了为对话框添加多选或单选列表,以及为这些列表添加事件处理的功能。另外,这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为:PositiveButton, NeutralButton, NegativeButton
    下列代码是一个多选列表的例子:


    Activity托管对话框:
    Android也提供了创建对话框的快捷方式,在Activity中可以通过如showDialog(), onCreateDialog(), onPrepareDialog(),dismissDialog(), removeDialog()等方法来创建和管理对话框。
    Activity的onCreateDialog方法用于在创建并显示对话框的时候调用,比如:

    @Override
    protected Dialog onCreateDialog(int id) {
    return new AlertDialog.Builder(this).setMessage(”How are you?”).setPositiveButton(
    ”Fine”,
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {

    }
    }).setNegativeButton(”Not so good”, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {

    }
    }
    ).create();
    }



    A、使用编程来创建对话框内容
    //核心代码: 先创建一个AlertDialog.Builder, 利用它创建一个AlertDialog对象
    AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
    builder2.setTitle("核心提示:");
    builder2
        .setMessage("AlertDialog是Dialog的一个子类,AlertDialog也是Android系统中最常用的对话框之一.一个AlertDialog可以有2个到3个按钮,可以对一个AlertDialog设置title以及Message.不能直接通过AlertDialog的构造参数生成一个AlertDialog,而是通过它的一个静态内部类AlertDialog.Builder来构造的.");
    builder2.setIcon(R.drawable.ic_menu_close_clear_cancel);
    //设置确定按钮
    builder2.setPositiveButton("确定",
            new DialogInterface.OnClickListener() {
                            @Override
                public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                    }
    });
    //设置普通按钮
    builder2.setNeutralButton("查看详细",
            new DialogInterface.OnClickListener() {
                          
                public void onClick(DialogInterface dialog, int which) {
                    }
    });
    //设置取消按钮
    builder2.setNegativeButton("取消",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
    }
    });
    builder2.show();

    B、使用XML文件来创建对话框内容
    在layout目录下创建dialog.xml
    <?xml version="1.0" encoding="utf-8"?>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:stretchColumns="1">

        <TableRow android:id="@+id/dialog_TableRow01"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:text="名字:" android:id="@+id/dialog_TextView01"
                android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
            <EditText android:id="@+id/dialog_EditText01"
                android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
        </TableRow>
        <TableRow android:id="@+id/dialog_TableRow02"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:text="密码:" android:id="@+id/dialog_TextView02"
                android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
            <EditText android:id="@+id/dialog_EditText02"
                android:password="true" android:layout_width="fill_parent"
                android:layout_height="wrap_content"></EditText>
        </TableRow>

    </TableLayout>

    // 利用LayoutInflater可以加载一个layout文件
                LayoutInflater flater = LayoutInflater.from(this);
                View v = flater.inflate(R.layout.dialog3, null);
                // 创建AlertDialog
                AlertDialog.Builder builder3 = new AlertDialog.Builder(this);
                builder3.setIcon(R.drawable.ic_menu_edit);
                builder3.setTitle("信息编辑");
                builder3.setView(v);
                builder3.setPositiveButton("添加",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                                           
                            }
                        });
                // 1.不能2个都是setPositiveButton,这样后面的这个会覆盖前面的按钮
                // 2.同时也要注意,这里的OnClickListener是DialogInterface下面的OnClickListener
                builder3.setNegativeButton("取消",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                                setTitle("选择了取消");
                            }
                        });
                builder3.show();


    C、进度对话框:
    ProgressDialog dialog = new ProgressDialog(this);
    dialog.setTitle("正在下载歌曲");
    dialog.setMessage("  请等待");
    dialog.show();


    Activity生命周期方法:

    android数据存储: 4种方式
    1. SharedPreferences
        底层使用xml文件保存数据, 优点是操作简单,结构简单
        缺点是不适宜保存一些复杂,海量数据
    2. 文件 + IO
       优点: 有java基础就很方便学习
       缺点: 操作,检索,更新不方便
    3. SQLite   android内部数据库  
    4. 内容提供器
       搭建数据共享的桥梁


    SharedPreferences存储数据:
    1)保存数据:
     
     SharedPreferences sp = this.getSharedPreferences("ACCOUNT", Activity.MODE_PRIVATE);
     //  如果是要完成写操作, 那么必须先创建 编辑器对象
     Editor edit = sp.edit();
     //  完成信息的编辑
     edit.putString("user","admin");
     edit.putString("passwd","123456");
     //  提交数据
     edit.commit();
    2)取出数据:
     SharedPreferences sp = this.getSharedPreferences("ACCOUNT", Activity.MODE_PRIVATE);
     //  如果是要完成写操作, 那么必须先创建 编辑器对象
     Editor edit = sp.edit();
    String name = sp.getString("user","aaaaaaaaaaaaaaaaaa");
    String passwd = sp.getString("passwd","bbbbbbbbbbbbbbbbb");   

  • 相关阅读:
    laydate 时间框弹窗点击弹出后立马消失的问题解决
    万字长文:ELK(V7)部署与架构分析
    人声消除的原理算法源码及方案实现
    主动降噪技术(ANC)的前生今世–行业分析
    主动降噪技术(ANC)的前生今世--原理仿真
    主动降噪技术(ANC)的前生今世--概念历史
    音频人生
    解决 Flask-sqlalchemy 中文乱码
    使用 key 登录时分开记录操作历史记录
    OpenSSH 使用技巧
  • 原文地址:https://www.cnblogs.com/yhlx/p/2166548.html
Copyright © 2011-2022 走看看