您的位置:首页 > 移动开发 > Android开发

android自定义ListView详解

2014-03-26 10:36 369 查看
我就对自定义ListView进行讲解下吧,直入真题吧,首先我新创建一个项目:listDemo;

其次,我们需要建立一个XML文件,在这里我就直接写在main.xml里:

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

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<ListView

android:id="@+id/listView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

然后我们需要定义一个ITEM.XML来显示其数据:

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

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

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<ImageView

android:id="@+id/images_id"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/icon"

/>

<LinearLayout

android:orientation="vertical"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

>

<TextView

android:id="@+id/text_id"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="default_001"

/>

<TextView

android:id="@+id/text_info"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="default_info"

/>

<TextView

android:id="@+id/text_url"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="default_url"

/>

</LinearLayout>

</LinearLayout>

现在我们把XML文件做好了,就是对其适配数据的布局进行定义了,首先我们需要创建一个类:

package com.jsd;

import java.util.ArrayList;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.widget.ListView;

import com.jsd.adapter.AppAdapter;

import com.jsd.model.AppInfos;

/**

* ListView customer

* @author jiangshide

*

*/

public class Demo extends Activity {

private Context mContext;

private ListView listView;

private ArrayList<AppInfos> appInfos;

private AppAdapter appAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

getComponenets();

}

/**

* componenet

*/

public void getComponenets(){

this.mContext = this;

listView = (ListView) findViewById(R.id.listView);

appInfos = new ArrayList<AppInfos>();

loadDatas();

appAdapter = new AppAdapter(mContext,appInfos);

listView.setAdapter(appAdapter);

}

/**

* load datas

*/

public void loadDatas(){

for (int i = 0; i < 10; i++) {

AppInfos ai = new AppInfos();

if(i == 1){

ai.setImages(R.drawable.icon);

}else if(i == 2){

ai.setImages(R.drawable.item1);

}else if(i == 3){

ai.setImages(R.drawable.item2);

}else if(i == 4){

ai.setImages(R.drawable.item3);

}else if(i == 5){

ai.setImages(R.drawable.item4);

}else if(i == 6){

ai.setImages(R.drawable.item5);

}

ai.setText_id("001");

ai.setText_infos("这是我们都需要注意的...");

ai.setText_url("http://jiangshide.com");

appInfos.add(ai);

}

}

}

这位主线程的UI类,

其实需要穿件一个适配器需要继承BaseAdapter:

package com.jsd.adapter;

import java.util.ArrayList;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import com.jsd.model.AppInfos;

import com.jsd.view.AppView;

/**

* Adapter

* @author jiangshide

*

*/

public class AppAdapter extends BaseAdapter {

private Context mContext;

private ArrayList<AppInfos> appInfos;

public AppAdapter(Context c) {

this.mContext = c;

}

public AppAdapter(Context c,ArrayList<AppInfos> appInfos) {

this.mContext = c;

this.appInfos = appInfos;

}

public int getCount() {

return appInfos.size();

}

public Object getItem(int position) {

return appInfos.get(position);

}

public long getItemId(int position) {

return position;

}

/**

* get view

*/

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

if(appInfos == null){

return null;

}

if(convertView == null){

AppView appView = new AppView(mContext);

appView.updateView(appInfos.get(position));

convertView = appView;

}else{

((AppView)convertView).updateView(appInfos.get(position));

}

return convertView;

}

}

为了对其数据进行适配,我们需要对数据进行持久话:使用BEAN的方式进行保存

package com.jsd.model;

/**

* datas

* @author jiangshide

*

*/

public class AppInfos {

private int images;

private String text_id;

private String text_infos;

private String text_url;

public int getImages() {

return images;

}

public void setImages(int images) {

this.images = images;

}

public String getText_id() {

return text_id;

}

public void setText_id(String textId) {

text_id = textId;

}

public String getText_infos() {

return text_infos;

}

public void setText_infos(String textInfos) {

text_infos = textInfos;

}

public String getText_url() {

return text_url;

}

public void setText_url(String textUrl) {

text_url = textUrl;

}

}

再次就是对View显示布局的控件进行定义来对数据参数的获取

package com.jsd.view;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import com.jsd.R;

import com.jsd.model.AppInfos;

/**

* View

* @author jiangshide

*

*/

public class AppView extends LinearLayout {

private Context mContext;

private ImageView image_id;

private TextView text_id,text_info,text_url;

/**

*

* @param context

*/

public AppView(Context context) {

super(context);

this.mContext = context;

initilize(context);

}

/**

*

* @param c

*/

public void initilize(Context c){

this.mContext = c;

View view = LayoutInflater.from(this.mContext).inflate(R.layout.item, null);

image_id = (ImageView) view.findViewById(R.id.images_id);

text_id = (TextView) view.findViewById(R.id.text_id);

text_info = (TextView) view.findViewById(R.id.text_info);

text_url = (TextView) view.findViewById(R.id.text_url);

addView(view);

}

/**

*

* @param ai

*/

public void updateView(AppInfos ai){

image_id.setImageResource(ai.getImages());

text_id.setText(ai.getText_id());

text_info.setText(ai.getText_infos());

text_url.setText(ai.getText_url());

}

}

OK,以上就是完整的代码实现对ListView的自定义的实现,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: