重写Adapter类需要实现的方法
需要重写Adapter类的四个方法即可,分别是
public int getCount();
public Object getItem(int position);
public long getItemId(int position);
public View getView(int position, View convertView, ViewGroup parent);
调用时仍然是在ListView或ListActivity中直接setAdapter(CustomAdapter);即可
重写Adapter类
cover.xml的layout文件
<!-- 一个TextView用来放东西,一个ListView用来和fooAdapter绑定 -->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<textview android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title"
android:textsize="25pt">
</textview>
<listview android:id="@+id/summary"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</listview>
</linearlayout>
实现一个继承于Activity的类,在类中的onCreate()方法中把布局给画出来
public class Cover extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//上面的布局
setContentView(R.layout.cover);
ListView lv = (ListView) findViewById(R.id.summary);
//自定义Adapter
FooAdapter adapter = new FooAdapter(this);
lv.setAdapter(adapter);
}
}
继承于BaseAdapter
简单的显示只有一个TextView
/*用的数据源是个很简单的String[](最好数据从外部传入),同时在类中还加上了一个Context类型的变量_ctx,此变量将在构造时被赋值。放个简单的TextView,这里对getView做修改就可以了。*/
class FooAdapter extends BaseAdapter {
private Context _ctx = null;
//数据源
private String[] _data = { "foo", "bar", "foobar", "barfoo" };
public FooAdapter(Context context) {
_ctx = context;
}
@Override
public int getCount() {
return _data.length;
}
@Override
public Object getItem(int position) {
return _data[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//创建个TextView存放数据
TextView tv = null;
if (null == convertView) {
tv = new TextView(_ctx);
Log.v("huzim", "Pos1 is " + position);
} else {
tv = (TextView) convertView;
}
tv.setText(_data[position]);
return tv;
}
}
每次调用getView会返回一个LinearLayout,里面包含有两个TextView
//convertView为Adapter中每个数据显示的控件
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout lay = null;
TextView tv_l = new TextView(_ctx);
TextView tv_r = new TextView(_ctx);
tv_l.setText("* ");
tv_r.setText(_data[position]);
tv_r.setGravity(Gravity.RIGHT);
if (null == convertView) {
lay = new LinearLayout(_ctx);
lay.addView(tv_l);
lay.addView(tv_r);
} else {
lay = (LinearLayout) convertView;
}
return lay;
}
每次返回一个TableLayout,暂时里面只有两列。
用TableLayout是因为有些列可能需要右对齐,好像在TextView里面做不了。 有一点需要注意的就是,在TableLayout中如果要设置右对齐的话, 一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TableLayout lay = null;
TableRow tr = new TableRow(_ctx);
TextView tv_l = new TextView(_ctx);
TextView tv_r = new TextView(_ctx);
tv_l.setText("* ");
tv_r.setText(_data[position]);
//右对齐
tv_r.setGravity(Gravity.RIGHT);
tv_r.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tr.addView(tv_l);
tr.addView(tv_r, new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
if (null == convertView) {
lay = new TableLayout(_ctx);
lay.addView(tr);
} else {
lay = (TableLayout) convertView;
}
/*在TableLayout中如果要设置右对齐的话,一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开*/
lay.setColumnStretchable(1, true);
return lay;
}
需要重写Adapter类的四个方法即可,分别是
public int getCount();
public Object getItem(int position);
public long getItemId(int position);
public View getView(int position, View convertView, ViewGroup parent);
调用时仍然是在ListView或ListActivity中直接setAdapter(CustomAdapter);即可
重写Adapter类
cover.xml的layout文件
<!-- 一个TextView用来放东西,一个ListView用来和fooAdapter绑定 -->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<textview android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title"
android:textsize="25pt">
</textview>
<listview android:id="@+id/summary"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</listview>
</linearlayout>
实现一个继承于Activity的类,在类中的onCreate()方法中把布局给画出来
public class Cover extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//上面的布局
setContentView(R.layout.cover);
ListView lv = (ListView) findViewById(R.id.summary);
//自定义Adapter
FooAdapter adapter = new FooAdapter(this);
lv.setAdapter(adapter);
}
}
继承于BaseAdapter
简单的显示只有一个TextView
/*用的数据源是个很简单的String[](最好数据从外部传入),同时在类中还加上了一个Context类型的变量_ctx,此变量将在构造时被赋值。放个简单的TextView,这里对getView做修改就可以了。*/
class FooAdapter extends BaseAdapter {
private Context _ctx = null;
//数据源
private String[] _data = { "foo", "bar", "foobar", "barfoo" };
public FooAdapter(Context context) {
_ctx = context;
}
@Override
public int getCount() {
return _data.length;
}
@Override
public Object getItem(int position) {
return _data[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//创建个TextView存放数据
TextView tv = null;
if (null == convertView) {
tv = new TextView(_ctx);
Log.v("huzim", "Pos1 is " + position);
} else {
tv = (TextView) convertView;
}
tv.setText(_data[position]);
return tv;
}
}
每次调用getView会返回一个LinearLayout,里面包含有两个TextView
//convertView为Adapter中每个数据显示的控件
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout lay = null;
TextView tv_l = new TextView(_ctx);
TextView tv_r = new TextView(_ctx);
tv_l.setText("* ");
tv_r.setText(_data[position]);
tv_r.setGravity(Gravity.RIGHT);
if (null == convertView) {
lay = new LinearLayout(_ctx);
lay.addView(tv_l);
lay.addView(tv_r);
} else {
lay = (LinearLayout) convertView;
}
return lay;
}
每次返回一个TableLayout,暂时里面只有两列。
用TableLayout是因为有些列可能需要右对齐,好像在TextView里面做不了。 有一点需要注意的就是,在TableLayout中如果要设置右对齐的话, 一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TableLayout lay = null;
TableRow tr = new TableRow(_ctx);
TextView tv_l = new TextView(_ctx);
TextView tv_r = new TextView(_ctx);
tv_l.setText("* ");
tv_r.setText(_data[position]);
//右对齐
tv_r.setGravity(Gravity.RIGHT);
tv_r.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tr.addView(tv_l);
tr.addView(tv_r, new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
if (null == convertView) {
lay = new TableLayout(_ctx);
lay.addView(tr);
} else {
lay = (TableLayout) convertView;
}
/*在TableLayout中如果要设置右对齐的话,一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开*/
lay.setColumnStretchable(1, true);
return lay;
}
发表评论
-
startActivityForResult 简介
2011-03-29 15:55 1284依次打开Activity A1--A2--A3--A4 这时 ... -
startActivityForResult
2011-03-29 15:49 1146startActivityForResult 方法-- ... -
史上最全的Android的Tab与TabHost讲解
2011-03-28 11:22 1591Tab与TabHost 这就是Tab,而盛放Tab的 ... -
Android对话框
2011-03-25 11:21 1125Android 对话框(Dialog)大全 ... -
PreferenceActivity详解
2011-03-25 11:15 1442为了引入这个概率 首先从需求说起 即:现有某Activity专 ... -
TCP/UDP/HTTP
2011-03-25 11:09 1125先来一个讲TCP、UDP和HTTP ... -
9png
2011-03-25 11:08 1914今天学习了用9png图来优化横屏竖屏的UI,使用sdk自带的工 ... -
Notification
2011-03-25 11:07 939Android系统的状态栏(Status Bar)中有一个创新 ... -
一些技巧
2011-03-25 11:03 7871:查看是否有存储卡插入 String status=Envi ... -
布局像素单位
2011-03-25 11:03 827Android的layout文件中有时候可能会指定具体的单位, ... -
使用ActivityGroup来切换Activity和Layout
2011-03-25 11:02 1135在一个主界面中做Activity切换一般都会用TabActiv ... -
activitygroup
2011-03-25 11:01 1730说说tabhost和activitygroup 最近 ... -
线程
2011-03-25 11:01 1014今天在论坛上看到一些关于线程的帖子,我觉得与我理解的有些差异, ... -
类级框架
2011-03-25 11:00 744类集框架:Collection,Map,Iterator,En ... -
Intent打电话
2011-03-25 11:00 1217intent英文意思是意图,pending表示即将发生或来临的 ... -
Intent Uri
2011-03-25 10:59 1068进入联系人页面 1.Intent intent = new I ... -
Service
2011-03-25 10:59 940一、Service的概念 Service是Android程序中 ... -
Broadcast Receiver
2011-03-25 10:56 1948一、Broadcast Receiver简介 Android中 ... -
ContentProvider MIME类型
2011-03-25 10:55 1238Android程序的主要4部分 ... -
ContentProvider-1查询
2011-03-25 10:55 1237今天看了android的官方文档中ContentProvide ...
相关推荐
本教程将深入探讨如何通过重写Adapter来达到这一目标,主要关注ListView的使用和适配器的定制。 首先,`ListView`是Android中用于展示可滚动列表的视图组件,它允许开发者在有限的屏幕空间内展示大量数据。与iOS的...
在这个项目中,我们将会深入探讨如何自定义一个带有图标的ExpandableListView,通过重写adapter来实现这一功能。 首先,我们需要了解ExpandableListAdapter,它是ExpandableListView的核心组件,负责数据的绑定和...
各种重写Adapter都会出现些问题,同样的我也遇到了!求大师帮忙解决
接下来,我们重写Adapter的几个关键方法: 1. `getCount()`: 返回ListView中项的数量,即数据列表的长度。 2. `getItem(int position)`: 根据位置返回对应的数据对象。 3. `getItemId(int position)`: 返回特定位置...
同时,还可以根据需要重写Adapter的其他方法,实现更复杂的功能,比如添加点击事件监听、数据过滤等。自定义Adapter是Android开发中的核心技能之一,掌握它能帮助我们更好地构建用户界面和处理数据展示。
我们可以通过重写Adapter的`getViewTypeCount()`方法来声明有多少种不同的View类型,然后在`getItemViewType(int position)`方法中返回对应位置的数据项所对应的View类型。这样,Adapter就能根据数据类型动态地创建...
3.重写Adapter的getView方法时,为每个checkbox添加事件响应并记录选择状态,通过获取获取状态记录值获取所有选择的checkbox值。 需要注意的是第三点,在重写getView方法时,不要判断convertView == null,如果判断...
自动提示文本输入(TextView)功能源码实现拼音汉字匹配且支持首字母,该功能主要是通过重写Adapter实现的,关键代码就是重写了Filter了,这个源码功能可以直接导入就可以使用的,大家可以看看吧。 使用说明: 1...
实现ListView分类的关键在于重写Adapter的以下方法: 1. `getItemViewType(int position)`:此方法返回给定位置的列表项的类型标识。根据数据源中的数据类型,我们可以返回不同的整数值,表示不同类型的视图。 2. ...
本教程将深入探讨如何在Android中实现自定义ListView,特别是通过重写Adapter来实现这一目标。 首先,理解ListView的工作原理至关重要。ListView依赖于Adapter来获取数据并将其转化为可以在ListView中显示的视图。...
这种方法的实现通常涉及到重写Adapter的几个关键方法,比如`getCount()`, `getItem()`, `getItemId()`等。 另一种方法是使用第三方库,这些库提供了一些简便的方式来添加固定视图到ListView。这些库通常已经封装了...
这通常涉及到重写Adapter中的某些方法,比如getView()方法中获取触摸事件,然后使用一个辅助类来管理拖放操作。 其次,为了使item能够拖动,需要为ListView中的每个item视图设置一个拖动监听器。在这个监听器中,...
5. 如果数据项的复杂性较高,可能还需要重写Adapter的getView(int position, View convertView, ViewGroup parent)方法,确保只有发生变化的item被重新绘制。 "下载更多打包源码~.url"可能是一个链接,指向更多的...
开发者需要重写Adapter的`getView()`方法,自定义每个列表项的布局和内容。 3. **ListView的Item点击事件**:可以通过设置OnItemClickListener监听ListView项的点击事件,实现用户交互。 4. **Header和Footer**:...
你可以重写Adapter的`getView()`方法,自定义每个列表项的布局和样式。 八、监听事件 为了实现用户交互,如点击事件,可以通过设置OnItemClickListener或在列表项上添加OnClickListener来捕获用户的操作,然后执行...
我们可以为每个项目设置OnClickListener,或者重写Adapter的`getView()`方法中的`setClickable()`和`setOnClickListener()`来响应点击事件。 在"ExpandableActivity"的例子中,可能涉及到ExpandableListView,这是...
在Android开发中,"仿qq左滑删除"是一...总的来说,“仿qq左滑删除”是一个涉及到自定义ListView、自定义布局、重写Adapter等多个Android开发技术的功能。通过这样的实现,我们可以为用户提供更直观、友好的交互体验。
同时,你需要重写Adapter的方法,如onCreateViewHolder()来创建ViewHolder,以及onBindViewHolder()来填充数据到对应的ViewHolder。 除了基本布局外,RecyclerView还支持Header和Footer的添加,通过在Adapter的数据...
3. 在Adapter中填充数据:重写Adapter的`getView()`方法,根据数据源填充每个ListView项的布局。 三、JSON字符串绑定 1. 解析JSON:使用Gson库,可以方便地将JSON字符串转换为Java对象。例如,如果你的JSON字符串...
- 处理点击事件:可以重写Adapter的`getView()`方法或者在ListView上注册`.setOnItemClickListener()`监听器,实现点击项的响应。 4. **自定义View Holder** - 为了优化ListView的性能,通常会在`getView()`方法...