Android入门开发--微博列表模拟

来源:互联网 发布:q宠大乐斗代玩软件 编辑:程序博客网 时间:2024/05/16 19:20

需要掌握的知识点:1.ListView控件的使用;

                  2.理解Adapter 的作用并掌握自定义FruitAdapter 的使用方式。

 

首先定义一个实体类用于存放对象,使其作为ListView适配器的适配类型。

具体方法如下:

publicclass Infor {

    private Stringname;

    privateintimageId;

 

    public Infor (String name,int imageId) {

       super();

       this.name = name;

       this.imageId = imageId;

    }

 

    public String getName() {

       returnname;

    }

 

    publicvoid setName(String name) {

       this.name = name;

    }

 

    publicint getImageId() {

       returnimageId;

    }

 

    publicvoid setImageId(int imageId) {

       this.imageId = imageId;

    }

}

然后我们需要建立一个自定义布局Infor_item.xml(ListView的子项布局);

具体实现如下:

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns: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/ivInfor"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/1_pic"/>

 

    <TextView

        android:id="@+id/tvInfor"

        android:layout_gravity="center"

        android:layout_margin="10dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="今天的天气真好"/>   //此处可以引用String.xml中的字段。

 

</LinearLayout>

 

以上的布局是为ListView的一个子项,接下来我们就要创建一个自定义的适配器InforAdapter,这个适配器继承自ArrayAdapter,重写构造方法和getView方法

具体实现方法如下:

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;

 

publicclass InforAdapterextendsArrayAdapter {

 

    privateintresourceId;

 

    public InforAdapter(Context context,int textViewResourceId) {

       super(context, textViewResourceId);

       resourceId = textViewResourceId;

    }

//每个子项被滚动到屏幕内的时候会被调用

    public ViewgetView(int position, View convertView, ViewGroup parent) {

       Infor infor = (Infor) getItem(position);

       View view = null;

       ViewHolder viewHolder;   //convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用ViewsetTag()方法,将ViewHolder对象存储在View中。

 

       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 {

//convertView不为空的时候则调用ViewgetTag()方法,把ViewHolder重新取出。

 

           view = convertView; // getView()方法中的convertView参数将之前加载好的布局进行缓存,以便之后重用

           viewHolder = (ViewHolder) convertView.getTag();

       }

       viewHolder.ivFruit.setImageResource(fruit.getImageId());

       viewHolder.tvFruit.setText(fruit.getName());

       return view;

    }

//添加一个内部类ViewHolder,用于对控件的实例进行缓存。

    class ViewHolder {

 

       ImageView ivInfor;

 

       TextView tvInfor;

 

    }

 

}

 

通过上述设置,所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。

 

 

本次android课程实现微博列表页面结束了,谢谢浏览。

                                                     

  

 

 

0 0