`
allenzxl
  • 浏览: 9183 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android学习笔记3(联系人应用)

阅读更多

一、该应用包含以下功能

添加联系人

删除联系人

编辑联系人

联系人详情

打电话

发短信

二、界面如下

1 列表界面

   

 2 添加编辑界面



 

3 长按列表item弹出的上下文菜单



 4 发短信界面

 5 详情界面



 

三、涉及的技术

 1 常用控件 下拉框 单选框 复选框 图片按钮  菜单(点击menu弹出菜单 上下文菜单(长按菜单)等
   1 菜单控件(点击menu弹出菜单) 在activity(点击menu弹出菜单中重写
      1.1  在activity中重写 onCreateOptionsMenu方法  加入菜单项menu.add(1, 1, 1, "添加");
      1.2  设置 actionbat显示 menu.add("添加")

              .setShowAsAction (MenuItem.SHOW_AS_ACTION_IF_ROOM);//在actionbar上显示菜单项
      1.3  在activity中重写 onOptionsItemSelected方法 之后根据菜单项的id或者tilte判断是按下了哪个菜单
   2 上下文菜单(长按菜单)
      2.1 给list控件登记 registerForContextMenu(listView);
      2.2 activity中 重写onCreateContextMenu
      2.3 activity中  重写 onContextItemSelected 增加菜单项选择事件

 

  3 适配器adapter的使用

       3.1  ArrayAdapter  单列的时候  适合简单数据类型  要求控件必须是textview类型
              adpter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
       3.2  SimpleAdapter  多列时使用
              android的系统布局最多只有两列,当然可以自定义布局文件,list数据元素是一个个的map

              把map中的元素根据字符串数组 寻找到key,并把key对应的值绑定到相应顺序的控件上
       3.3  CursorAdapter   游标适配器 查询数据库时返回使用
              注意  在用CursorAdapter时 返回的主键字段必须为_id  
       3.4  自定义适配器 继承BaseAdapter
           在列表显示中,listView 其实不能单独装载数据,它的每一列都需要各自独立的控件,

           之后我们 用 适配器把数据绑定到各自独立的控件中。
            数据如何绑定呢,
                1 编写适配器类 继承BaseAdapter
                2 因为数据要绑定的控件是在布局文件里的,所以要获得布局文件的实例 

                  依靠LayoutInflater   类 

                   (LayoutInflater)context.getSystemServ(Context.LAYOUT_INFLATER_SERVICE);
                3 使用LayoutInflater的inflate方法或许布局文件实例  作用类似于findViewById()。
                4 获得布局文件实例后 其实是view组件 在获取布局文件中的各个控件实例

                    根据position参 数对某行数据进行逐个绑定
                5  利用缓存提高效率  tag

                    需要说明的一点是对于以上1,2,3步骤,

                   我们是可以通过硬编码的方式创建布局以及布局中的控件 的,其实布局也是view的一种

      
      
       3.5 adapter绑定的数据更新后,如果数据不及时更新,

          请调用 adapter.notifyDataSetChanged();  数据更 新后及时告知主线程---ui线程
       3.6 关于LayoutInflater这个类  它的作用类似于findViewById()。
          不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;

           而findViewById()是找xml  布局文件下的具体widget控件(如Button、TextView等)。
          具体作用:
            1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
            2、对于一个已经载入的界面,就可以使用Activity.findViewById()方法来获得其中的界面元素。
4  activity如何通信的
    1 如何启动activity
      1.1 startActivity
      1.2 startActivityForResult  可以接收返回结果
           在打开的新的activity中调用setResult方法设置intent返回数据,关闭新的actibity
           在前一个activity重写 onActivityResult 接收返回数据
           利用请求码在onActivityResult方法中告诉是老的activity中哪个按钮打开 区分不同的点击事件
           利用结果码来区分不同的新的activity返回 如一个activity可能打开多个新的activity,当关闭后

           怎么区分是哪个activity呢,此时就用结果码判断
    2  传递数据 利用intent以及bundle类 bundle类似map
       2.1 利用Bundle类
       2.2 直接使用intent  这种写法的作用等价于上面的写法,

             只不过这种写法是把数据一个个地添加进Intent,这种写法使用起来比较方便,
       2.3  如何传递复杂的数据类型,如对象或者集合,如果需要传递对象,

               则对象需要序列化,在android中,序列化对象有两种方式
               1 对象实现Serializable接口  jdk已经实现序列化了  之后调用intent的putExtra方法
               2 对象实现Parcelable接口,自己实现序列化方法,
                   1 实现接口方法中writeToParcel写入需要序列化对象属性,如
                        public void writeToParcel(Parcel dest, int flags) {
                                      dest.writeString(name);
                                     dest.writeInt(age);
                                              。。。
                                      }
       2 定义一个public static final Parcelable.Creator<Person> CREATOR 变量,名字必须为CREATOR ,例如
          public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
               public Person createFromParcel(Parcel source) {
                      //注意按照顺序读出 writeToParcel方法中怎么写入,source则怎么读出
                    return new Person(source.readString(), source.readInt(),
                         source.readString(), source.readString());
                       }

                        public Person[] newArray(int size) {
                                    return new Person[size];
                                  }
                         };

 

        3  删除时跳出确认对话框 AlertDialog.Builder.create().show()

      

说明:本应用数据保存在内存中,下一次保存在文件与数据库中

 

 

  • 大小: 9.6 KB
  • 大小: 12.7 KB
  • 大小: 11.9 KB
  • 大小: 10.4 KB
  • 大小: 7.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics