以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件:

需要注意以下的几点:

1、自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注意加载布局文件和加载控件的区别;

2、自定义好Adapter后,在Activity中实现ListView的过程:

(1)生成Adapter对象(注意传入一个list表),并将Adapter对象作为ListView的适配器

ListViewAdapter adapter = new ListViewAdapter(getApplicationContext(),list); listView.setAdapter(adapter);
   (2)当list发生改动的时候,需要使用adapter.notifyDataSetChanged();
3、在Adapter的getView()时,使用LayoutInflater.Inflate()方法加载布局,findViewByID()加载控件;

项目包含的文件如下:

结果如下:

1、输入数字时候为第一种布局

2、输入文本的时候为第二种布局

完整代码如下

Adapter类:


package com.example.testlistview;

import java.util.List;

import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {
private Context context;
private LayoutInflater listContainer;
private List<String> listItems;

private TextView textView1;
private TextView textView2;
private Button button1;
private Button button2;

public ListViewAdapter(Context context,List<String> list) {
// TODO Auto-generated constructor stub
this.context = context;
this.listItems = list;
this.listContainer = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return listItems.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
String str = listItems.get(position).toString();
if(isNum(str)==false){
convertView = listContainer.inflate(R.layout.list_item_layout2, null);
textView1 = (TextView)convertView.findViewById(R.id.textView1);
textView2 = (TextView)convertView.findViewById(R.id.textView2);
button1 = (Button)convertView.findViewById(R.id.button1);
button2 = (Button)convertView.findViewById(R.id.button2);
textView1.setText(listItems.get(position));
textView1.setTextColor(Color.BLACK);
textView2.setText(listItems.get(position));
textView2.setTextColor(Color.BLACK);
button1.setText(listItems.get(position));
button2.setText(listItems.get(position));
return convertView;
}else {
convertView = listContainer.inflate(R.layout.list_item_layout1, null);
textView1 = (TextView)convertView.findViewById(R.id.textView1);
textView2 = (TextView)convertView.findViewById(R.id.textView2);
textView1.setText(listItems.get(position));
textView1.setTextColor(Color.BLACK);
textView2.setText(listItems.get(position));
textView2.setTextColor(Color.BLACK);
return convertView;
}
}

public static boolean isNum(String str){
return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
}

}


//Activity类

package com.example.testlistview;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class ListViewActivity extends ActionBarActivity {
private ListView listView;
private Button btn;
private EditText edt;
private ListViewAdapter adapter;
private ArrayList<String> list = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
listView = (ListView)findViewById(R.id.listView1);
btn = (Button)findViewById(R.id.button1);
edt = (EditText)findViewById(R.id.editText1);
adapter = new ListViewAdapter(getApplicationContext(),list);
listView.setAdapter(adapter);

btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
list.add(edt.getText().toString());
adapter.notifyDataSetChanged();
}
});
}

}

主布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="312dp" >
</ListView>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >

<requestFocus />
</EditText>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="提交" />

</LinearLayout>

</LinearLayout>

layout1布局:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="horizontal" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:text="TextView" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:text="TextView" />

</LinearLayout>

layout2布局:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.3"
android:gravity="center"
android:text="detail" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:gravity="center"
android:orientation="vertical" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="layout1" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="layout2" />

</LinearLayout>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.3"
android:gravity="center"
android:text="state" />

</LinearLayout>

关于自定义Adapter实现ListView的使用的更多相关文章

  1. 【转】Android自定义Adapter的ListView的思路及代码

    原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下   在开发中,我们经常使 ...

  2. Android学习----自定义Adapter实现ListView

    前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...

  3. 【转】Android之自定义Adapter的ListView

    http://www.cnblogs.com/topcoderliu/archive/2011/05/07/2039862.html 在开发中,我们经常使用到ListView这个控件.Android的 ...

  4. Android之自定义Adapter的ListView

    ListView的创建,一般要具备两大元素: 1)数据集,即要映射的字符串.图片信息之类. 2)适配器,实现把要映射的字符串.图片信息映射成视图(如Textview.Image等组件),再添加到Lis ...

  5. [转]Android自定义Adapter的ListView的思路及代码

    本文转自:http://www.jb51.net/article/37236.htm 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快 ...

  6. Android 自定义Adapter 但listview 只显示第一条数据

    <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content ...

  7. 自定义adapter实现listview双列显示

    package com.appshare; import java.util.ArrayList;import java.util.List; import android.content.Conte ...

  8. android代码优化----ListView中自定义adapter的封装(ListView的模板写法)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. Android ListView 自定义 Adapter

    自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...

随机推荐

  1. 高效算法——J 中途相遇法,求和

    ---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Su ...

  2. PHPExcel内存泄漏问题

    使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽. 然而 PHPExcel 存在 circu ...

  3. Keywords Search - HDU 2222(AC自动机模板)

    题目大意:输入几个子串,然后输入一个母串,问在母串里面包含几个子串.   分析:刚学习的AC自动机,据说这是个最基础的模板题,所以也是用了最基本的写法来完成的,当然也借鉴了别人的代码思想,确实是个很神 ...

  4. 使用MyEclipse实现简单的Servlet程序

    1. 创建一个继承于GenericServlet的类 3. 重写Server方法 package cn.school; import java.io.IOException; import javax ...

  5. lesson10:hashmap变慢原因分析

    下面的英文描述了String.hashCode()方法,在特定情况下,返回值为0的问题: Java offers the HashMap and Hashtable classes, which us ...

  6. 对于数组(字符串)slice方法的总结

    数组(字符串)使用slice方法的目的就是截取目标数组(字符串),通俗的来讲就是截取想要的.网上有很多slice方法的实例加以说明,在此主要是从特殊到一般对此方法进行了总结. 先说总结的方法,再看下面 ...

  7. Demon_背包系统(实现装备栏,背包栏,可以切换装备)

    using UnityEngine; using System.Collections; public enum BoxType { Normal,//普通格子 Equip//装备栏格子 } publ ...

  8. html contenteditable

    contenteditable 是html中的一個屬性,在HTML中,某些元素設置 contenteditable='true'  屬性時可以開啟該元素的編輯模式,contenteditable 可以 ...

  9. 一些Linux优化方法

    1. 利用栈做备胎,减少分配空间的几率,IO自己有一份缓存,如果超了就使用stack空间 2. 分散IO:代表readv,可以通过一次系统调用,将内容读到分散的缓存中,可以减少系统的系统调用

  10. 使用python求字符串或文件的MD5

    使用python求字符串或文件的MD5 五月 21st, 2008 #以下可在python3000运行. #字符串md5,用你的字符串代替'字符串'中的内容. import hashlib md5=h ...