学习日志
需创建一个含有ListView的xml,一个自定义ListView组件的xml,之后将自定义ListView组件添加到ListView之中。
①含有ListView的xml:
<?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="vertical" >
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
②自定义ListView组件的xml:
<?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="vertical" >
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
③添加过程
需要新建一个类包含ListView组件中的所有text与image与其他(例中Book类,类中含有一个图片id,一个名称String,一个信息String)
package com.example.dome;
public class Book {
private String name;
private String information;
private int imageId;
public Book(String name, String information, int imageId) {
// TODO Auto-generated constructor stub
this.name = name;
this.information = information;
this.imageId = imageId;
}
public int getImageId() {
return imageId;
}
public String getName() {
return name;
}
public String getInformation() {
return information;
}
}
private String information;
private int imageId;
public Book(String name, String information, int imageId) {
// TODO Auto-generated constructor stub
this.name = name;
this.information = information;
this.imageId = imageId;
}
public int getImageId() {
return imageId;
}
public String getName() {
return name;
}
public String getInformation() {
return information;
}
}
再新建Arrayadapter的子类收集所有Book类(例中BookAdapter)
getview方法目的是使看到的每一个ListView组成显示出来,过程为利用上下文context与ListView组件的layout的ID寻找需要显示的view。从view中获取ListView组件中的各个信息(如例中图片id,名称string,信息string)。利用getitem(position)获取book实例,之后将该实例对号添加入已创建的view中。
import java.util.List;
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;
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 BookAdapter extends ArrayAdapter<Book>{
private int resourceId;
public BookAdapter(Context context, int resource, List<Book> 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
Book book = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
TextView textView1 = (TextView) view.findViewById(R.id.textView1);
TextView textView2 = (TextView) view.findViewById(R.id.textView2);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);
textView1.setText(book.getName());
textView2.setText(book.getInformation());
imageView.setImageResource(book.getImageId());
return view;
}
}
public BookAdapter(Context context, int resource, List<Book> 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
Book book = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
TextView textView1 = (TextView) view.findViewById(R.id.textView1);
TextView textView2 = (TextView) view.findViewById(R.id.textView2);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);
textView1.setText(book.getName());
textView2.setText(book.getInformation());
imageView.setImageResource(book.getImageId());
return view;
}
}
再将adapter与ListView,ListView组成结合(例中ListviewActivity)
package com.example.dome;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.ListView;
import android.os.Bundle;
import android.view.Window;
import android.widget.ListView;
public class ListviewActivity extends Activity{
private List<Book> books = new ArrayList<Book>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
char count = 'A';
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.listview);
for(int i = 0; i < 10; i++) {
String string = String.valueOf((char)(count+i));
Book book = new Book(string, string, R.drawable.ic_launcher);
books.add(book);
}
BookAdapter adapter = new BookAdapter(ListviewActivity.this, R.layout.listview_content, books);
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
char count = 'A';
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.listview);
for(int i = 0; i < 10; i++) {
String string = String.valueOf((char)(count+i));
Book book = new Book(string, string, R.drawable.ic_launcher);
books.add(book);
}
BookAdapter adapter = new BookAdapter(ListviewActivity.this, R.layout.listview_content, books);
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
}
}