2015-4-23

Java构造器

与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问。其他类可以通过该类的get函数得到对象。如单子模式;子类的构造函数默认调用super(),即父类的构造函数,然后再回到子类自己的构造函数。子类的构造函数中写了super()效果也一样,相当于没写(只能写在第一句,否则出错);构造函数可以重载(当父类有多个构造函数时,可以用super(xxx)来指定调用父类的哪个构造函数);当自定义了构造函数后,系统就不自动生成构造函数了。所以最好为每个类写无参构造函数,以免出错;运行过程:有继承关系时,1>初始化父类的静态块和静态成员变量 2>初始化子类的静态块和静态成员变量 3>执行父类的构造函数 4>执行子类的构造函数;

单子模式,是指一段时间内该类的对象只存在一份。

  1. //test.java
  2. class ace{
  3. private static ace a;
  4. private ace(){
  5. System.out.println("1");
  6. }
  7. public static ace getAce(){
  8. if( null == a ){
  9. a = new ace();
  10. }
  11. return a;
  12. }
  13. }
  14.  
  15. public class test{
  16. public static void main(String[] args) {
  17. //ace a = new ace();错
  18. ace b = ace.getAce();
  19. ace c = ace.getAce();
  20.  
  21. if( b==c )
  22. System.out.println("equal");
  23. }
  24. }

单子模式

android ListView

1.简单的使用库本身的布局

把数据和布局塞到适配器里,把适配器塞到ListView里。

  1. String[] data = {"1","2","3","4","5","6","7","8","9","1","2","3","4","5","6","7","8","9"};
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
  6. android.R.layout.simple_list_item_1,data);
  7. ListView lv = (ListView)findViewById(R.id.listview);
  8. lv.setAdapter(adapter);
  9. };
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="${relativePackage}.${activityClass}" >
  6.  
  7. <ListView
  8. android:id="@+id/listview"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. ></ListView>
  12. </RelativeLayout>

2.自定义每项的布局

自定义了布局diy_list_item、每一行数据的类fruit、继承自ArrayAdapter<fruit>的类fruitAdapter

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:id="@+id/imageView"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. />
  11. <TextView
  12. android:id="@+id/textView"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. />
  16.  
  17. </LinearLayout>

diy_list_item.xml

  1. package com.example.listviewtest;
  2.  
  3. public class fruit {
  4. private String name;
  5. private int imageId;
  6.  
  7. public fruit(String name,int imageId){
  8. this.name = name;
  9. this.imageId = imageId;
  10. }
  11. public String getName(){
  12. return name;
  13. }
  14. public int getImageId(){
  15. return imageId;
  16. }
  17. }

fruit.class

  1. package com.example.listviewtest;
  2.  
  3. import java.util.List;
  4.  
  5. import android.content.Context;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.ImageView;
  11. import android.widget.TextView;
  12.  
  13. public class fruitAdapter extends ArrayAdapter<fruit>{
  14.  
  15. private int resourceId;
  16. public fruitAdapter(Context context, int resource, List<fruit> objects) {
  17. super(context, resource, objects);
  18. // TODO Auto-generated constructor stub
  19. resourceId = resource;
  20. }
  21.  
  22. @Override
  23. public View getView(int position, View convertView, ViewGroup parent) {
  24. // TODO Auto-generated method stub
  25. fruit f = getItem(position);
  26. View v ;
  27. v = LayoutInflater.from(getContext()).inflate(resourceId, null);
  28. ImageView fruitImage = (ImageView)v.findViewById(R.id.imageView);
  29. TextView fruitName = (TextView)v.findViewById(R.id.textView);
  30. fruitImage.setImageResource(f.getImageId());
  31. fruitName.setText(f.getName());
  32. return v;
  33. }
  34. }

fruitAdapter.class

  1. package com.example.listviewtest;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.AdapterView.OnItemClickListener;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.ListView;
  14. import android.widget.Toast;
  15.  
  16. public class MainActivity extends Activity {
  17.  
  18. ArrayList<fruit> fruitList = new ArrayList<fruit>();
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. initFruit();
  24. fruitAdapter adapter = new fruitAdapter(MainActivity.this,
  25. R.layout.diy_list_item,fruitList);
  26. ListView lv = (ListView) findViewById(R.id.listview);
  27. lv.setAdapter(adapter);
  28. }
  29.  
  30. private void initFruit(){
  31. fruit one = new fruit("1",R.drawable._1);
  32. fruitList.add(one);
  33. fruit two = new fruit("2",R.drawable._2);
  34. fruitList.add(two);
  35. fruit three = new fruit("3",R.drawable._3);
  36. fruitList.add(three);
  37. fruit four = new fruit("4",R.drawable._4);
  38. fruitList.add(four);
  39. fruit five = new fruit("5",R.drawable._5);
  40. fruitList.add(five);
  41. fruit six = new fruit("6",R.drawable._6);
  42. fruitList.add(six);
  43. fruit seven = new fruit("7",R.drawable._7);
  44. fruitList.add(seven);
  45. fruit eight = new fruit("8",R.drawable._8);
  46. fruitList.add(eight);
  47. fruit nine = new fruit("9",R.drawable._9);
  48. fruitList.add(nine);
  49. }
  50. }

MainActivity.class

问题:

1>diy_list_item.xml里线性布局的宽和高都是match_parent,会不会太大了,留出空白?

2>为什么要写一个fruitAdapter类?(当然这里重写了getView()方法,是可以实现目标的。但不写这个类,用原有的适配器,可以吗?)

Hint: "_1"、"_2"等图片要自己下载,放在res/drawalbe-hdpi下。

3.在public View getView(int position, View convertView, ViewGroup parent)中利用convertView这个缓存来进行优化

  1. public View getView(int position, View convertView/*用于将之前加载好的布局进行缓存,以便重用*/, ViewGroup parent) {
  2. // TODO Auto-generated method stub
  3. fruit f = getItem(position);//该position对应的fruit对象
  4. View v ;//理解是diy_list_item这个布局,布局也是一种view
  5. ViewHolder vHolder = null;//用于缓存fruitImage和fruitName,避免每次都findViewById()
  6. if( null == convertView ){
  7. v = LayoutInflater.from(getContext()).inflate(resourceId, null);
  8. vHolder = new ViewHolder();
  9. vHolder.fruitImage = (ImageView)v.findViewById(R.id.imageView);
  10. vHolder.fruitName = (TextView)v.findViewById(R.id.textView);
  11. v.setTag(vHolder);
  12. }
  13. else{
  14. v = convertView;
  15. vHolder = (ViewHolder) v.getTag();
  16. }
  17. vHolder.fruitImage.setImageResource(f.getImageId());
  18. vHolder.fruitName.setText(f.getName());
  19. return v;
  20. }
  21. //内部类ViewHolder
  22. class ViewHolder{
  23. ImageView fruitImage;
  24. TextView fruitName;
  25. }

getView()

4.添加点击事件

  1. lv.setOnItemClickListener(new OnItemClickListener() {
  2. @Override
  3. public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
  4. // TODO Auto-generated method stub
  5. fruit f = fruitList.get(position);
  6. Toast.makeText(MainActivity.this, f.getName(), Toast.LENGTH_SHORT).show();
  7. }
  8. });

大四实习准备1_java构造器_android ListView的更多相关文章

  1. 大四实习准备2_java异常处理_android控件练习

    2015-4-24 Java 异常处理 可以有多个catch;ArrayIndexOutOfBoundsException类是Exception类的子类RuntimeException类的一个间接子类 ...

  2. 大四实习准备6_android服务

    2015-5-9 1.服务是什么 android四大组件之一,有一些特点: 1)服务的运行不依赖于用户界面,即使程序被切换到后台.或者用户打开了另外一个应用程序,服务仍然能够保持正常运行.(当对应的程 ...

  3. 大四实习准备5_android广播机制

    2015-5-1 android 广播机制 5.1简介 分为标准广播(Normal broadcasts)(无先后顺序,几乎同时接收,不可截断)和有序广播(Ordered broadcasts)(有先 ...

  4. 大四实习准备4_java内部类

    2015-4-30 [昨天又可耻地休息了一天,懒劲比较大啊.跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了.表现在对亲情和爱情上. 我想生活的本意是积极进取.茁壮生长并时常感 ...

  5. 大四实习准备3_java多线程

    4.25.27无耻地懒散了.....26号陪女朋友去了.今天28号,继续加油! 2015-4-28 Java 多线程 (java中类不能多继承,可以多层继承:接口则都可以) 定义和创建: 方法一:继承 ...

  6. jQuery-H5-css3转盘抽奖-遁地龙卷风

    (-1)写在前面 这个idea不是我的,首先向这位前辈致敬. 我用的是chrome49, jquery3.0. 完整的程序案例在我的百度云盘http://pan.baidu.com/s/1jI2QSn ...

  7. OneAPM x 腾讯 | OneAPM 技术公开课·深圳 报名:前端性能大作战!

    「 OneAPM 技术公开课」由应用性能管理第一品牌 OneAPM 发起,内容面向 IT 开发和运维人员.云集技术牛人.知名架构师.实践专家共同探讨技术热点. 11月28日,OneAPM 技术公开课第 ...

  8. 我的2011年总结--大明zeroson程序猿一周年总结

    花絮:看到csdn举办"我的2011"年度征文活动,我恰好工作也一年多了,上个月写了篇博客,主要是我换工作方面的流水账,这篇我从主观.客观.多方位地谈谈我这一年的变化.       ...

  9. 【蜗牛—漫漫IT路之大学篇(九) 】

    再来一篇叨叨的博客 近期,状态还是那个状态,人还是那个人. 前两天,感冒了,可能是宿舍阴面的事吧.然后,中午睡觉的时候穿着短袖披了一件外套,然后鼻子就不通气了.只是,前天晚上,我骑着崔国强的车子跑了不 ...

随机推荐

  1. tomcat源码解读(1)–tomcat热部署实现原理

    tomcat的热部署实现原理:tomcat启动的时候会有启动一个线程每隔一段时间会去判断应用中加载的类是否发生变法(类总数的变化,类的修改),如果发生了变化就会把应用的启动的线程停止掉,清除引用,并且 ...

  2. Demo学习: ColumnSort

    ColumnSort 设置UniDGGrid点击表头时排序,设置方法比较麻烦且不通用,在实际开发中用处不大. 自己在项目中用了一个比较笨的办法,写了一个函数通过sql来排序: procedure TM ...

  3. c++空类的大小

    初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们 ...

  4. Oracle分析函数 — rank, dense_rank, row_number用法

    本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course   nva ...

  5. Xubuntu 安装mentohust

    对于路由器上网到用户来说,自动分配IP上网。 对于校园网用户,首先下载mentohust_0.3.4-1_i386.deb,双击安装程序 然后在命令窗口中输入sudo -s 密码:user来获得roo ...

  6. EXTJS 4.2 资料 控件之checkboxgroup的用法(动态数据)

    在开发中遇到两种情况:第一在新增窗体时,要动态加载CheckBox项:第二在修改时不但需要加载所有CheckBox项,还要并且选中之前新增时的选项 如图这是在修改页面的效果: 1.在新增窗体中动态加载 ...

  7. html template

    https://wrapbootstrap.com/tag/single-page http://themeforest.net/ https://wrapbootstrap.com/themes h ...

  8. mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法

    23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...

  9. Linux Mint SmoothTask2的安装方法

    首先,先下载smooth task:点击这里下载 下载之后解压缩,里面有个install文件,点击打开: To install plasmoid unpack archive, go to the d ...

  10. WDS无线桥接

    因为放假回家,长时间不在家,家里也没什么人,所以也就没有网可以用.为了两个月办宽带又不值得,太过浪费了.于是就只能蹭网用了.当然,要和邻居打个招呼或者你能搞定密码的情况下不打招呼(嘿嘿...).但是有 ...