我的博客

来源:互联网 发布:linux vi 保存并退出 编辑:程序博客网 时间:2024/05/29 10:12

第一步,导入水果列表的代码。然后打开Fruit.java,添加变量:private String text;private String time;分别的评论部分和显示时间的部分。添加Source-Generate Constructor using Fields,确定;再添加GetterSetter方法。

第二步,这个时候系统会报错,打开MainActivity.java,修改initFruits()这个方法,Fruit apple = new Fruit("潇湘夜雨", R.drawable.p1,"今天好高兴啊!","1分钟前");下边的也类似。

第三步,打开FruitAdapter.java,修改 getView这个方法。添加TextView textView=(TextView)view.findViewById(R.id.textView);
TextView textView2=(TextView)view.findViewById(R.id.textView2);
再添加textView.setText(fruit.getText());
textView2.setText(fruit.getTime());

第四步,自定义标题栏。

1.res/value下建立mytitlebar.xml文件

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="myTitleBg">

        <item name="android:background">#FF0000</item>

    </style>

    <style name="myTheme" parent="android:Theme">

        <item name="android:windowNoTitle">false</item>

        <item name="android:windowTitleSize">30dp</item>

        <item name="android:windowTitleBackgroundStyle">@style/myTitleBg</item>

    </style>

</resources>

2.修改AndroidManifest.xml文件

 android:theme="@style/myTheme"

下边是代码:

MainActivity.java[java] view plaincopyprint?01.package com.example.ui_listview01;  02.  03.  04.import java.util.ArrayList;  05.import java.util.List;  06.  07.  08.import android.app.Activity;  09.import android.os.Bundle;  10.import android.view.Menu;  11.import android.view.View;  12.import android.widget.AdapterView;  13.import android.widget.Toast;  14.import android.widget.AdapterView.OnItemClickListener;  15.import android.widget.ListView;  16.  17.  18.import com.example.ui_listview01.adpater.FruitAdapter;  19.import com.example.ui_listview01.model.Fruit;  20.  21.  22.public class MainActivity extends Activity {  23.private ListView lvFruits;  24.//1.准备好数据源   25.private List<Fruit> fruitList = new ArrayList<Fruit>();  26.  27.  28.@Override  29.protected void onCreate(Bundle savedInstanceState) {  30.super.onCreate(savedInstanceState);  31.setContentView(R.layout.activity_main);  32.//1.准备好数据源   33.initFruits();  34.  35.lvFruits = (ListView) findViewById(R.id.lvFruits);  36.  37.//2.创建Adapter   38.        FruitAdapter adapter=new FruitAdapter(this, R.layout.fruit_item,fruitList);  39.          40.        //3.绑定AdapterView和Adapter之间的关联   41.lvFruits.setAdapter(adapter);  42.lvFruits.setOnItemClickListener(new OnItemClickListener() {  43.  44.  45.public void onItemClick(AdapterView<?> adapterView, View view, int position,  46.long id) {  47.   Fruit fruit=fruitList.get(position);  48.   Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();  49.}  50.});  51.  52.  53.  54.  55.  56.  57.}  58.  59.  60.private void initFruits() {  61.Fruit apple = new Fruit("潇湘夜雨", R.drawable.p1,"今天好高兴啊!","1分钟前");  62.fruitList.add(apple);  63.Fruit banana = new Fruit("小小", R.drawable.p2,"今天吃了好多啊!","2分钟前");  64.fruitList.add(banana);  65.Fruit orange = new Fruit("青春无悔", R.drawable.p3,"你今天多的怎么样啊?","3分钟前");  66.fruitList.add(orange);  67.Fruit watermelon = new Fruit("小丸子", R.drawable.p4,"最近如何呀?","1小时前");  68.fruitList.add(watermelon);  69.Fruit pear = new Fruit("米粒", R.drawable.p5,"过年好啊!","1.5小时前");  70.fruitList.add(pear);  71.Fruit grape = new Fruit("丽丽", R.drawable.p6,"我今天中午在学校吃了好多呀!","2小时前");  72.fruitList.add(grape);  73.Fruit pineapple = new Fruit(" 嘻嘻", R.drawable.p7,"你最近过的咋样啊!","6小时前");  74.fruitList.add(pineapple);  75.Fruit strawberry = new Fruit("晕晕", R.drawable.p8,"我今晚上吃啥呀","1天前");  76.fruitList.add(strawberry);  77.Fruit cherry = new Fruit("哈哈", R.drawable.p10,"再见了,各位朋友~","1周前");  78.fruitList.add(cherry);  79.  80.  81.  82.}  83.  84.  85.@Override  86.public boolean onCreateOptionsMenu(Menu menu) {  87.// Inflate the menu; this adds items to the action bar if it is present.   88.getMenuInflater().inflate(R.menu.main, menu);  89.return true;  90.}  91.  92.  93.}  package com.example.ui_listview01;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import com.example.ui_listview01.adpater.FruitAdapter;import com.example.ui_listview01.model.Fruit;public class MainActivity extends Activity {private ListView lvFruits;//1.准备好数据源private List<Fruit> fruitList = new ArrayList<Fruit>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.准备好数据源initFruits();lvFruits = (ListView) findViewById(R.id.lvFruits);//2.创建Adapter        FruitAdapter adapter=new FruitAdapter(this, R.layout.fruit_item,fruitList);                //3.绑定AdapterView和Adapter之间的关联lvFruits.setAdapter(adapter);lvFruits.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> adapterView, View view, int position,long id) {   Fruit fruit=fruitList.get(position);   Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();}});}private void initFruits() {Fruit apple = new Fruit("潇湘夜雨", R.drawable.p1,"今天好高兴啊!","1分钟前");fruitList.add(apple);Fruit banana = new Fruit("小小", R.drawable.p2,"今天吃了好多啊!","2分钟前");fruitList.add(banana);Fruit orange = new Fruit("青春无悔", R.drawable.p3,"你今天多的怎么样啊?","3分钟前");fruitList.add(orange);Fruit watermelon = new Fruit("小丸子", R.drawable.p4,"最近如何呀?","1小时前");fruitList.add(watermelon);Fruit pear = new Fruit("米粒", R.drawable.p5,"过年好啊!","1.5小时前");fruitList.add(pear);Fruit grape = new Fruit("丽丽", R.drawable.p6,"我今天中午在学校吃了好多呀!","2小时前");fruitList.add(grape);Fruit pineapple = new Fruit(" 嘻嘻", R.drawable.p7,"你最近过的咋样啊!","6小时前");fruitList.add(pineapple);Fruit strawberry = new Fruit("晕晕", R.drawable.p8,"我今晚上吃啥呀","1天前");fruitList.add(strawberry);Fruit cherry = new Fruit("哈哈", R.drawable.p10,"再见了,各位朋友~","1周前");fruitList.add(cherry);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}} FruitAdapter.java[java] view plaincopyprint?01.package com.example.ui_listview01.adpater;  02.  03.  04.import java.util.List;  05.  06.  07.import android.content.Context;  08.import android.view.LayoutInflater;  09.import android.view.View;  10.import android.view.ViewGroup;  11.import android.widget.ArrayAdapter;  12.import android.widget.BaseAdapter;  13.import android.widget.ImageView;  14.import android.widget.TextView;  15.  16.  17.import com.example.ui_listview01.R;  18.import com.example.ui_listview01.model.Fruit;  19.  20.  21.//存在问题:在FruitAdapter的getView()方法中每次都将布局重新加载了一遍,当ListView快速滚动的时候这就会成为性能的瓶颈   22.public class FruitAdapter extends ArrayAdapter<Fruit> {  23.private int resourceId;  24.public FruitAdapter(Context context, int textViewResourceId,  25.List<Fruit> data) {  26.super(context, textViewResourceId, data);  27.resourceId=textViewResourceId;  28.}  29.  30.  31.// 这个方法在每个子项被滚动到屏幕内的时候会被调用   32.@Override  33.public View getView(int position, View convertView, ViewGroup parent) {  34.Fruit fruit = getItem(position);  35.View view=LayoutInflater.from(getContext()).inflate(resourceId, null);  36.ImageView ivFruit=(ImageView) view.findViewById(R.id.ivFruit);  37.TextView tvFruit=(TextView) view.findViewById(R.id.tvFruit);  38.TextView textView=(TextView)view.findViewById(R.id.textView);  39.TextView textView2=(TextView)view.findViewById(R.id.textView2);  40.ivFruit.setImageResource(fruit.getImageId());  41.tvFruit.setText(fruit.getName());  42.textView.setText(fruit.getText());  43.textView2.setText(fruit.getTime());  44.return view;  45.}  46.  47.  48.  49.  50.  51.  52.  53.  54.  55.  56.  57.}  package com.example.ui_listview01.adpater;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.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.example.ui_listview01.R;import com.example.ui_listview01.model.Fruit;//存在问题:在FruitAdapter的getView()方法中每次都将布局重新加载了一遍,当ListView快速滚动的时候这就会成为性能的瓶颈public class FruitAdapter extends ArrayAdapter<Fruit> {private int resourceId;public FruitAdapter(Context context, int textViewResourceId,List<Fruit> data) {super(context, textViewResourceId, data);resourceId=textViewResourceId;}// 这个方法在每个子项被滚动到屏幕内的时候会被调用@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Fruit fruit = getItem(position);View view=LayoutInflater.from(getContext()).inflate(resourceId, null);ImageView ivFruit=(ImageView) view.findViewById(R.id.ivFruit);TextView tvFruit=(TextView) view.findViewById(R.id.tvFruit);TextView textView=(TextView)view.findViewById(R.id.textView);TextView textView2=(TextView)view.findViewById(R.id.textView2);ivFruit.setImageResource(fruit.getImageId());tvFruit.setText(fruit.getName());textView.setText(fruit.getText());textView2.setText(fruit.getTime());return view;}} FruitAdapterImprove1.java[java] view plaincopyprint?01.package com.example.ui_listview01.adpater;  02.  03.  04.import android.content.Context;  05.import android.view.LayoutInflater;  06.import android.view.View;  07.import android.view.ViewGroup;  08.import android.widget.ArrayAdapter;  09.import android.widget.ImageView;  10.import android.widget.TextView;  11.  12.  13.import com.example.ui_listview01.R;  14.import com.example.ui_listview01.model.Fruit;  15.  16.  17.//存在问题:虽然现在已经不会再重复去加载布局,但是每次在getView()方法中还是会调用View的findViewById()方法来获取一次控件的实例。   18.public class FruitAdapterImprove1 extends ArrayAdapter {  19.  20.  21.private int resourceId;  22.  23.  24.public FruitAdapterImprove1(Context context, int textViewResourceId) {  25.super(context, textViewResourceId);  26.resourceId = textViewResourceId;  27.}  28.  29.  30.// 这个方法在每个子项被滚动到屏幕内的时候会被调用   31.//getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用   32.@Override  33.public View getView(int position, View convertView, ViewGroup parent) {  34.Fruit fruit = (Fruit) getItem(position);  35.View view=null;  36.if(convertView==null)  37.  view = LayoutInflater.from(getContext()).inflate(resourceId, null);  38.else  39.  view=convertView;  40.ImageView fruitImage = (ImageView) view.findViewById(R.id.ivFruit);  41.TextView fruitName = (TextView) view.findViewById(R.id.tvFruit);  42.fruitImage.setImageResource(fruit.getImageId());  43.fruitName.setText(fruit.getName());  44.return view;  45.}  46.  47.  48.}  package com.example.ui_listview01.adpater;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;import com.example.ui_listview01.R;import com.example.ui_listview01.model.Fruit;//存在问题:虽然现在已经不会再重复去加载布局,但是每次在getView()方法中还是会调用View的findViewById()方法来获取一次控件的实例。public class FruitAdapterImprove1 extends ArrayAdapter {private int resourceId;public FruitAdapterImprove1(Context context, int textViewResourceId) {super(context, textViewResourceId);resourceId = textViewResourceId;}// 这个方法在每个子项被滚动到屏幕内的时候会被调用//getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Fruit fruit = (Fruit) getItem(position);View view=null;if(convertView==null)  view = LayoutInflater.from(getContext()).inflate(resourceId, null);else  view=convertView;ImageView fruitImage = (ImageView) view.findViewById(R.id.ivFruit);TextView fruitName = (TextView) view.findViewById(R.id.tvFruit);fruitImage.setImageResource(fruit.getImageId());fruitName.setText(fruit.getName());return view;}} FruitAdapterImprove2.doc[java] view plaincopyprint?01.package com.example.ui_listview01.adpater;  02.  03.  04.import android.content.Context;  05.import android.view.LayoutInflater;  06.import android.view.View;  07.import android.view.ViewGroup;  08.import android.widget.ArrayAdapter;  09.import android.widget.ImageView;  10.import android.widget.TextView;  11.  12.  13.import com.example.ui_listview01.R;  14.import com.example.ui_listview01.model.Fruit;  15.  16.  17.//我们新增了一个内部类ViewHolder,用于对控件的实例进行缓存。   18.//当convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder对象存储在View中。   19.//当convertView不为空的时候则调用View的getTag()方法,把ViewHolder重新取出。   20.//这样所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。   21.public class FruitAdapterImprove2 extends ArrayAdapter {  22.  23.  24.private int resourceId;  25.  26.  27.public FruitAdapterImprove2(Context context, int textViewResourceId) {  28.super(context, textViewResourceId);  29.resourceId = textViewResourceId;  30.}  31.  32.  33.// 这个方法在每个子项被滚动到屏幕内的时候会被调用   34.// getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用   35.@Override  36.public View getView(int position, View convertView, ViewGroup parent) {  37.Fruit fruit = (Fruit) getItem(position);  38.View view = null;  39.ViewHolder viewHolder;  40.if (convertView == null) {  41.view = LayoutInflater.from(getContext()).inflate(resourceId, null);  42.viewHolder = new ViewHolder();  43.viewHolder.ivFruit = (ImageView) view.findViewById(R.id.ivFruit);  44.viewHolder.tvFruit = (TextView) view.findViewById(R.id.tvFruit);  45.view.setTag(viewHolder);  46.} else {  47.view = convertView;  48.viewHolder = (ViewHolder) convertView.getTag();  49.}  50.viewHolder.ivFruit.setImageResource(fruit.getImageId());  51.viewHolder.tvFruit.setText(fruit.getName());  52.return view;  53.}  54.  55.  56.class ViewHolder {  57.  58.  59.ImageView ivFruit;  60.  61.  62.TextView tvFruit;  63.  64.  65.}  66.  67.  68.}  package com.example.ui_listview01.adpater;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;import com.example.ui_listview01.R;import com.example.ui_listview01.model.Fruit;//我们新增了一个内部类ViewHolder,用于对控件的实例进行缓存。//当convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder对象存储在View中。//当convertView不为空的时候则调用View的getTag()方法,把ViewHolder重新取出。//这样所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。public class FruitAdapterImprove2 extends ArrayAdapter {private int resourceId;public FruitAdapterImprove2(Context context, int textViewResourceId) {super(context, textViewResourceId);resourceId = textViewResourceId;}// 这个方法在每个子项被滚动到屏幕内的时候会被调用// getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Fruit fruit = (Fruit) getItem(position);View view = null;ViewHolder viewHolder;if (convertView == null) {view = LayoutInflater.from(getContext()).inflate(resourceId, null);viewHolder = new ViewHolder();viewHolder.ivFruit = (ImageView) view.findViewById(R.id.ivFruit);viewHolder.tvFruit = (TextView) view.findViewById(R.id.tvFruit);view.setTag(viewHolder);} else {view = convertView;viewHolder = (ViewHolder) convertView.getTag();}viewHolder.ivFruit.setImageResource(fruit.getImageId());viewHolder.tvFruit.setText(fruit.getName());return view;}class ViewHolder {ImageView ivFruit;TextView tvFruit;}}Fruit.java[java] view plaincopyprint?01.package com.example.ui_listview01.model;  02.  03.  04.public class Fruit {  05.private String name;  06.private int imageId;  07.private String text;  08.private String time;  09.public Fruit(String name, int imageId, String text, String time) {  10.super();  11.this.name = name;  12.this.imageId = imageId;  13.this.text = text;  14.this.time = time;  15.}  16.public String getName() {  17.return name;  18.}  19.public void setName(String name) {  20.this.name = name;  21.}  22.public int getImageId() {  23.return imageId;  24.}  25.public void setImageId(int imageId) {  26.this.imageId = imageId;  27.}  28.public String getText() {  29.return text;  30.}  31.public void setText(String text) {  32.this.text = text;  33.}  34.public String getTime() {  35.return time;  36.}  37.public void setTime(String time) {  38.this.time = time;  39.}  40.  41.  42.  43.  44.  45.  46.  47.}  package com.example.ui_listview01.model;public class Fruit {private String name;private int imageId;private String text;private String time;public Fruit(String name, int imageId, String text, String time) {super();this.name = name;this.imageId = imageId;this.text = text;this.time = time;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getImageId() {return imageId;}public void setImageId(int imageId) {this.imageId = imageId;}public String getText() {return text;}public void setText(String text) {this.text = text;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}fruit_item.xml[html] view plaincopyprint?01.<?xml version="1.0" encoding="utf-8"?>  02.<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  03.    android:layout_width="match_parent"  04.    android:layout_height="wrap_content"  05.    android:orientation="horizontal" >  06.  07.  08.    <ImageView  09.        android:id="@+id/ivFruit"  10.        android:layout_width="wrap_content"  11.        android:layout_height="wrap_content"  12.        android:src="@drawable/p1" />  13.  14.  15.    <TextView  16.        android:id="@+id/tvFruit"  17.        android:layout_width="wrap_content"  18.        android:layout_height="wrap_content"  19.        android:layout_margin="10dp"  20.        android:layout_marginLeft="27dp"  21.        android:layout_toRightOf="@+id/ivFruit"  22.        android:text="Apple" />  23.  24.  25.    <TextView  26.        android:id="@+id/textView"  27.        android:layout_width="wrap_content"  28.        android:layout_height="wrap_content"  29.        android:layout_alignLeft="@+id/tvFruit"  30.        android:layout_below="@+id/tvFruit"  31.        android:layout_marginLeft="21dp"  32.        android:text="今天真高兴" />  33.  34.  35.    <TextView  36.        android:id="@+id/textView2"  37.        android:layout_width="wrap_content"  38.        android:layout_height="wrap_content"  39.        android:layout_alignBaseline="@+id/tvFruit"  40.        android:layout_alignBottom="@+id/tvFruit"  41.        android:layout_alignParentRight="true"  42.        android:layout_marginRight="16dp"  43.        android:text="TextView" />  44.  45.  46.</RelativeLayout>  <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal" >    <ImageView        android:id="@+id/ivFruit"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/p1" />    <TextView        android:id="@+id/tvFruit"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:layout_marginLeft="27dp"        android:layout_toRightOf="@+id/ivFruit"        android:text="Apple" />    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/tvFruit"        android:layout_below="@+id/tvFruit"        android:layout_marginLeft="21dp"        android:text="今天真高兴" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/tvFruit"        android:layout_alignBottom="@+id/tvFruit"        android:layout_alignParentRight="true"        android:layout_marginRight="16dp"        android:text="TextView" /></RelativeLayout>activity_main.xml[html] view plaincopyprint?01.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  02.    xmlns:tools="http://schemas.android.com/tools"  03.    android:id="@+id/LinearLayout1"  04.    android:layout_width="match_parent"  05.    android:layout_height="match_parent"  06.    android:orientation="vertical"  07.    tools:context=".MainActivity" >  08.  09.  10.    <ListView  11.        android:id="@+id/lvFruits"  12.        android:layout_width="match_parent"  13.        android:layout_height="wrap_content" >  14.    </ListView>  15.  16.  17.</LinearLayout>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/LinearLayout1"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >    <ListView        android:id="@+id/lvFruits"        android:layout_width="match_parent"        android:layout_height="wrap_content" >    </ListView></LinearLayout> AndroidManifest.xml[html] view plaincopyprint?01.<?xml version="1.0" encoding="utf-8"?>  02.<manifest xmlns:android="http://schemas.android.com/apk/res/android"  03.    package="com.example.ui_listview01"  04.    android:versionCode="1"  05.    android:versionName="1.0" >  06.      07.  08.  09.    <uses-sdk  10.        android:minSdkVersion="8"  11.        android:targetSdkVersion="17" />  12.  13.  14.    <application  15.        android:allowBackup="true"  16.        android:icon="@drawable/ic_launcher"  17.        android:label="@string/app_name"  18.        android:theme="@style/myTheme" >  19.        <activity  20.            android:name="com.example.ui_listview01.MainActivity"  21.            android:label="@string/app_name" >  22.            <intent-filter>  23.                <action android:name="android.intent.action.MAIN" />  24.  25.  26.                <category android:name="android.intent.category.LAUNCHER" />  27.            </intent-filter>  28.        </activity>  29.    </application>  30.  31.  32.</manifest>  


0 0
原创粉丝点击