关于自定义Adapter实现ListView的使用
以下为使用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的使用的更多相关文章
- 【转】Android自定义Adapter的ListView的思路及代码
原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使 ...
- Android学习----自定义Adapter实现ListView
前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...
- 【转】Android之自定义Adapter的ListView
http://www.cnblogs.com/topcoderliu/archive/2011/05/07/2039862.html 在开发中,我们经常使用到ListView这个控件.Android的 ...
- Android之自定义Adapter的ListView
ListView的创建,一般要具备两大元素: 1)数据集,即要映射的字符串.图片信息之类. 2)适配器,实现把要映射的字符串.图片信息映射成视图(如Textview.Image等组件),再添加到Lis ...
- [转]Android自定义Adapter的ListView的思路及代码
本文转自:http://www.jb51.net/article/37236.htm 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快 ...
- Android 自定义Adapter 但listview 只显示第一条数据
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content ...
- 自定义adapter实现listview双列显示
package com.appshare; import java.util.ArrayList;import java.util.List; import android.content.Conte ...
- android代码优化----ListView中自定义adapter的封装(ListView的模板写法)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android ListView 自定义 Adapter
自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...
随机推荐
- [Audio processing] wav音频文件合并
合并多个文件,需要包含1.文件读取和写入功能,2.数组合并 package com.audioprocessingbox.myfunc; import java.io.File; import jav ...
- Hdu 3887 Counting Offspring \ Poj 3321 Apple Tree \BZOJ 1103 [POI2007]大都市meg
这几个题练习DFS序的一些应用. 问题引入: 给定一颗n(n <= 10^5)个节点的有根树,每个节点标有权值,现有如下两种操作: 1.C x y 以节点x的权值修改为y. 2.Q x ...
- jxl对excel删除行
简单记录下: package com.pingan; import java.io.File; import java.util.regex.Matcher; import java.util.reg ...
- ASP.NET中Get和Post的用法
单form的提交有两种方式,一种是get的方法,一种是post 的方法.看下面代码,理解ASP.NET Get和Post两种提交的区别: < form id="form1" ...
- Shiro Quartz之Junit測试Session管理
Shiro的quartz主要API上提供了org.apache.shiro.session.mgt.quartz下session管理的两个类:QuartzSessionValidationJob和Qu ...
- [置顶] poj1416数字切割解题报告
题意:有一段纸片,就是一个不超过7位数的整数,现在给定你一个目标值 aim ,让你去选择把纸片切成几段,然后这个几段的和值 最接近 aim 且不超过 aim, 分析: 对于这个纸段,比如一个 四位数的 ...
- 使用jQuery Mobile和Phone Gap开发Android应用程序(转)
经过了一段时间的学习,初步了解了该如何使用jQuery Mobile和 Phone Gap来开发一个Android应用程序,也想把这些东西介绍给大家. 1. 软件准备 要进行android app的开 ...
- Android(java)学习笔记241:多媒体之 MediaPlayer使用
MediaPlayer类可用于控制音频/视频文件或流的播放.关于如何使用这个类的方法还可以阅读VideoView类的文档. 1.MediaPlayer 状态图 对播放音频/视频文件和流的控 ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- codevs愚蠢的矿工(树形DP)
/* 树形DP 根节点一定有人 然后 剩下的人没到每个孩子去 因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了 当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子 转 ...