大四实习准备1_java构造器_android ListView
2015-4-23
Java构造器
与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问。其他类可以通过该类的get函数得到对象。如单子模式;子类的构造函数默认调用super(),即父类的构造函数,然后再回到子类自己的构造函数。子类的构造函数中写了super()效果也一样,相当于没写(只能写在第一句,否则出错);构造函数可以重载(当父类有多个构造函数时,可以用super(xxx)来指定调用父类的哪个构造函数);当自定义了构造函数后,系统就不自动生成构造函数了。所以最好为每个类写无参构造函数,以免出错;运行过程:有继承关系时,1>初始化父类的静态块和静态成员变量 2>初始化子类的静态块和静态成员变量 3>执行父类的构造函数 4>执行子类的构造函数;
单子模式,是指一段时间内该类的对象只存在一份。
如
//test.java
class ace{
private static ace a;
private ace(){
System.out.println("1");
}
public static ace getAce(){
if( null == a ){
a = new ace();
}
return a;
}
} public class test{
public static void main(String[] args) {
//ace a = new ace();错
ace b = ace.getAce();
ace c = ace.getAce(); if( b==c )
System.out.println("equal");
}
}
单子模式
android ListView
1.简单的使用库本身的布局
把数据和布局塞到适配器里,把适配器塞到ListView里。
     String[] data = {"1","2","3","4","5","6","7","8","9","1","2","3","4","5","6","7","8","9"};
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                 android.R.layout.simple_list_item_1,data);
         ListView lv = (ListView)findViewById(R.id.listview);
         lv.setAdapter(adapter);
     };
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" > <ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</RelativeLayout>
2.自定义每项的布局
自定义了布局diy_list_item、每一行数据的类fruit、继承自ArrayAdapter<fruit>的类fruitAdapter
<?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="horizontal" >
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> </LinearLayout>
diy_list_item.xml
 package com.example.listviewtest;
 public class fruit {
     private String name;
     private int imageId;
     public fruit(String name,int imageId){
         this.name = name;
         this.imageId = imageId;
     }
     public String getName(){
         return name;
     }
     public int getImageId(){
         return imageId;
     }
 }
fruit.class
package com.example.listviewtest; import java.util.List; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class fruitAdapter extends ArrayAdapter<fruit>{ private int resourceId;
public fruitAdapter(Context context, int resource, List<fruit> objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
resourceId = resource;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
fruit f = getItem(position);
View v ;
v = LayoutInflater.from(getContext()).inflate(resourceId, null);
ImageView fruitImage = (ImageView)v.findViewById(R.id.imageView);
TextView fruitName = (TextView)v.findViewById(R.id.textView);
fruitImage.setImageResource(f.getImageId());
fruitName.setText(f.getName());
return v;
}
}
fruitAdapter.class
package com.example.listviewtest; import java.util.ArrayList; import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends Activity { ArrayList<fruit> fruitList = new ArrayList<fruit>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruit();
fruitAdapter adapter = new fruitAdapter(MainActivity.this,
R.layout.diy_list_item,fruitList);
ListView lv = (ListView) findViewById(R.id.listview);
lv.setAdapter(adapter);
} private void initFruit(){
fruit one = new fruit("1",R.drawable._1);
fruitList.add(one);
fruit two = new fruit("2",R.drawable._2);
fruitList.add(two);
fruit three = new fruit("3",R.drawable._3);
fruitList.add(three);
fruit four = new fruit("4",R.drawable._4);
fruitList.add(four);
fruit five = new fruit("5",R.drawable._5);
fruitList.add(five);
fruit six = new fruit("6",R.drawable._6);
fruitList.add(six);
fruit seven = new fruit("7",R.drawable._7);
fruitList.add(seven);
fruit eight = new fruit("8",R.drawable._8);
fruitList.add(eight);
fruit nine = new fruit("9",R.drawable._9);
fruitList.add(nine);
}
}
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这个缓存来进行优化
 public View getView(int position, View convertView/*用于将之前加载好的布局进行缓存,以便重用*/, ViewGroup parent) {
         // TODO Auto-generated method stub
         fruit f = getItem(position);//该position对应的fruit对象
         View v ;//理解是diy_list_item这个布局,布局也是一种view
         ViewHolder vHolder = null;//用于缓存fruitImage和fruitName,避免每次都findViewById()
         if( null == convertView ){
             v = LayoutInflater.from(getContext()).inflate(resourceId, null);
             vHolder = new ViewHolder();
             vHolder.fruitImage = (ImageView)v.findViewById(R.id.imageView);
             vHolder.fruitName = (TextView)v.findViewById(R.id.textView);
             v.setTag(vHolder);
         }
         else{
             v = convertView;
             vHolder = (ViewHolder) v.getTag();
         }
         vHolder.fruitImage.setImageResource(f.getImageId());
         vHolder.fruitName.setText(f.getName());
         return v;
     }
      //内部类ViewHolder
      class ViewHolder{
          ImageView fruitImage;
          TextView fruitName;
      }
getView()
4.添加点击事件
 lv.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
                 // TODO Auto-generated method stub
                 fruit f = fruitList.get(position);
                 Toast.makeText(MainActivity.this, f.getName(), Toast.LENGTH_SHORT).show();
             }
         });
大四实习准备1_java构造器_android ListView的更多相关文章
- 大四实习准备2_java异常处理_android控件练习
		2015-4-24 Java 异常处理 可以有多个catch;ArrayIndexOutOfBoundsException类是Exception类的子类RuntimeException类的一个间接子类 ... 
- 大四实习准备6_android服务
		2015-5-9 1.服务是什么 android四大组件之一,有一些特点: 1)服务的运行不依赖于用户界面,即使程序被切换到后台.或者用户打开了另外一个应用程序,服务仍然能够保持正常运行.(当对应的程 ... 
- 大四实习准备5_android广播机制
		2015-5-1 android 广播机制 5.1简介 分为标准广播(Normal broadcasts)(无先后顺序,几乎同时接收,不可截断)和有序广播(Ordered broadcasts)(有先 ... 
- 大四实习准备4_java内部类
		2015-4-30 [昨天又可耻地休息了一天,懒劲比较大啊.跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了.表现在对亲情和爱情上. 我想生活的本意是积极进取.茁壮生长并时常感 ... 
- 大四实习准备3_java多线程
		4.25.27无耻地懒散了.....26号陪女朋友去了.今天28号,继续加油! 2015-4-28 Java 多线程 (java中类不能多继承,可以多层继承:接口则都可以) 定义和创建: 方法一:继承 ... 
- jQuery-H5-css3转盘抽奖-遁地龙卷风
		(-1)写在前面 这个idea不是我的,首先向这位前辈致敬. 我用的是chrome49, jquery3.0. 完整的程序案例在我的百度云盘http://pan.baidu.com/s/1jI2QSn ... 
- OneAPM x 腾讯 | OneAPM 技术公开课·深圳 报名:前端性能大作战!
		「 OneAPM 技术公开课」由应用性能管理第一品牌 OneAPM 发起,内容面向 IT 开发和运维人员.云集技术牛人.知名架构师.实践专家共同探讨技术热点. 11月28日,OneAPM 技术公开课第 ... 
- 我的2011年总结--大明zeroson程序猿一周年总结
		花絮:看到csdn举办"我的2011"年度征文活动,我恰好工作也一年多了,上个月写了篇博客,主要是我换工作方面的流水账,这篇我从主观.客观.多方位地谈谈我这一年的变化. ... 
- 【蜗牛—漫漫IT路之大学篇(九)
】
		再来一篇叨叨的博客 近期,状态还是那个状态,人还是那个人. 前两天,感冒了,可能是宿舍阴面的事吧.然后,中午睡觉的时候穿着短袖披了一件外套,然后鼻子就不通气了.只是,前天晚上,我骑着崔国强的车子跑了不 ... 
随机推荐
- php curl 伪造IP来源的代码分享
			php curl 可以模仿用户登录,还可以模仿用户IP地址.伪造IP来源. 1,curl发出请求的文件fake_ip.php: <?php $ch = curl_init(); $url = & ... 
- php 字母大小写转换的函数
			分享下,在php编程中,将字母大小写进行转换的常用函数. 1.将字符串转换成小写strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串 2.将字符转成大 ... 
- 直接下载完整chrome浏览器的方法
			目前通过下吗的链接可以获得独立的安装包. http://www.google.com/chrome/eula.html?standalone=1&hl=zh-CN 
- 【Vmware】已有镜像文件的导入
			1 虚拟机文件夹中各个文件简介 在创建虚拟机的时候会把相关的文件保存到一个文件夹中.我的机器是Windows 7,64位 ,保存的路径是: C:\Users\User\Documents\Virtu ... 
- ContextMenuStrip控件
			设置单击窗体右键菜单 注意如果想在form1中显示右键菜单,那么要设置form1的属性 
- P3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
			这题..思维上远没有上一题复杂,是一个裸的RMQ..利用倍增就可以解决了. var n,q,i,j,f,t,c:longint; a:array[..,..] of longint; function ... 
- linux whereis which
			whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s). [root@localhost ~]# whereis svn svn ... 
- collectionView代码创建
			@interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> @p ... 
- 2002: [Hnoi2010]Bounce 弹飞绵羊 - BZOJ
			Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ... 
- JVM内存区域模型
			一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆” ,"perm", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共 ... 
