Android之自定义ListView

学习日志
需创建一个含有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" >

    <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" >

    <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" >

        <ImageView
            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" />

    </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;
 }
 
}

再新建Arrayadapter的子类收集所有Book类(例中BookAdapter)
getview方法目的是使看到的每一个ListView组成显示出来,过程为利用上下文context与ListView组件的layout的ID寻找需要显示的view。从view中获取ListView组件中的各个信息(如例中图片id,名称string,信息string)。利用getitem(position)获取book实例,之后将该实例对号添加入已创建的view中。
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 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;
 }
}

再将adapter与ListView,ListView组成结合(例中ListviewActivity)
package com.example.dome;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
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);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值