今天晚上做一个依据数组中元素是否为null,来设置textView的可见性,本来想用简单的用setVisibility来实现,结果好像没有什么效果,后来去看SimpleAdapter的getView()原理,发现可以bindView方法中实现这一功能,于是有了下面RemindViewAdapter类,代码基本是在SimpleAdapter中摘抄出来的。
/**
* 用于RemindView里数据绑定的Adapter
*
* @author xzz
*
*/
public class RemindViewAdapter extends SimpleAdapter {
/**
* 保存map的list,map保存数据
*/
private List<? extends Map<String, ?>> mData;
/**
* 解析的xml资源文件id
*/
private int mResource;
/**
* RemindViewAdapter所需的key数组
*/
private String[] mFrom;
/**
* RemindViewAdapter所需的id数组
*/
private int[] mTo;
/**
* 解析器
*/
private LayoutInflater mInflater;
/**
* 有更新的内容的数量,没有更新的位置置null,
*/
private String[] mNewTextItem;
/**
* 属兔绑定
*/
private ViewBinder mViewBinder;
/**
* 构造方法,对实例域进行引用复制
*
* @param context
* @param data
* @param resource
* @param from
* @param to
* @param newTextItem
* @see android.widget.SimpleAdapter
*/
public RemindViewAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to, String[] newTextItem) {
super(context, data, resource, from, to);
mData = data;
mResource = resource;
mFrom = from;
mTo = to;
mNewTextItem = newTextItem;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
* @see android.widget.Adapter#getCount()
*/
public int getCount() {
return mData.size();
}
/**
* @see android.widget.Adapter#getItem(int)
*/
public Object getItem(int position) {
return mData.get(position);
}
/**
* @see android.widget.Adapter#getItemId(int)
*/
public long getItemId(int position) {
return position;
}
/**
* @see android.widget.Adapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(position, convertView, parent,
mResource);
}
/**
*
* 从资源文件中创建View
*
* @param position
* 位置
* @param convertView
* @param parent
* @param resource
* @return
* @see android.widget.SimpleAdapter#createViewFromResource
*/
private View createViewFromResource(int position, View convertView,
ViewGroup parent, int resource) {
View v;
if (convertView == null) {
v = mInflater.inflate(resource, parent, false);
} else {
v = convertView;
}
bindView(position, v);
return v;
}
/**
* 主要是依据newItemText数组中是否为null,来设置R.id.newtextitem的可视性
*
* @param position 位置
* @param view listView中item的View
* @see android.widget.SimpleAdapter#bindView
*/
private void bindView(int position, View view) {
final Map<String, ?> dataSet = mData.get(position);
if (dataSet == null) {
return;
}
final ViewBinder binder = mViewBinder;
final String[] from = mFrom;
final int[] to = mTo;
final int count = to.length;
for (int i = 0; i < count; i++) {
final View v = view.findViewById(to[i]);
if (v != null) {
final Object data = dataSet.get(from[i]);
String text = data == null ? "" : data.toString();
boolean bound = false;
if (binder != null) {
bound = binder.setViewValue(v, data, text);
}
if (!bound) {
if (v instanceof TextView) {
setViewText((TextView) v, text);
if (from[i].equals(key[2])
&& mNewTextItem[position] == null)
//在这里实现依据newItemText数组中是否为null,来设置R.id.newtextitem的可视性
//当然也可以在这个方法里实现自己定制的ListView中的Item
v.setVisibility(View.INVISIBLE);
} else if (v instanceof ImageView) {
if (data instanceof Integer) {
setViewImage((ImageView) v, (Integer) data);
} else {
setViewImage((ImageView) v, text);
}
} else {
throw new IllegalStateException(
v.getClass().getName()
+ " is not a "
+ " view that can be bounds by this SimpleAdapter");
}
}
}
}
}
}
- 大小: 13.4 KB
分享到:
相关推荐
综上所述,理解并熟练运用SimpleAdapter和自定义Adapter是Android开发中的重要技能。通过灵活运用这些知识,开发者可以创建出功能丰富、交互性强的列表视图,提升用户界面的体验。在实际项目中,可以根据具体需求...
在Android中,最常见的Adapter实现有ArrayAdapter、SimpleAdapter和CursorAdapter,但有时这些内置的Adapter无法满足特定需求,这时就需要我们自定义Adapter。 自定义Adapter通常涉及以下几个步骤: 1. 创建一个...
7. **自定义适配器**:如果SimpleAdapter无法满足所有需求,可以考虑继承BaseAdapter来自定义更复杂的适配器。 总之,SimpleAdapter是Android开发中快速展示列表数据的一个好工具。通过熟练掌握其使用方法和进阶...
在Android开发中,ListView是一个非常常见的组件,用于展示大量数据的列表形式。在这个场景中,我们探讨了如何...在实际项目中,选择哪种方式取决于具体的需求和场景,但自定义Adapter通常能提供更丰富的定制化功能。
接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上下文和数据集作为构造函数参数。然后,通过`listView.setAdapter(listViewAdapter)`将Adapter绑定到ListView上。 在`getView...
接下来,我们需要创建一个自定义的`ListAdapter` 类,继承自`SimpleAdapter`,并在`getView()` 方法中为按钮设置监听器。这里我们假设名为 `CustomSimpleAdapter`: ```java public class CustomSimpleAdapter ...
自定义适配器通常需要继承BaseAdapter或CursorAdapter,重写其中的几个关键方法,如`getCount()`、`getItem()`、`getItemId()`以及`getView()`。 ```java public class CustomSpinnerAdapter extends ArrayAdapter...
总结起来,自定义Adapter是Android开发中实现ListView个性化和功能扩展的重要手段。通过自定义Adapter,开发者可以根据需求创建复杂的数据视图,并处理各种用户交互事件,从而提高应用的用户体验和功能多样性。
示例中的"adapter"文件可能包含了实现以上步骤的代码,包括自定义Adapter类、数据模型类以及展示数据的布局文件。在实际开发中,你可能还需要处理点击事件、优化视图复用等高级功能。 总之,自定义ListView的...
常见的Adapter有ArrayAdapter、SimpleAdapter等,但自定义Adapter可以提供更大的灵活性。 3. **继承Latest Control**:描述中提到的“继承最新控件”,可能是指开发者在自定义ListView时,利用了Android最新的UI...
在这个自定义Adapter中,我们将维护一个记录当前选中项的变量,例如`int selectedPosition`。这个变量用于存储被选中的列表项位置。 ```java public class CustomListAdapter extends ArrayAdapter<String> { ...
9. **自定义Adapter和视图**:为了实现更复杂的UI和交互,开发者可能需要自定义Adapter和视图。这包括创建自定义的XML布局文件,以及在Adapter的`getView()`方法中对其进行实例化和配置。 10. **ListView与...
5. **自定义Adapter** - 当系统提供的Adapter无法满足需求时,可以继承BaseAdapter并覆盖其方法,如`getView()`,来实现自定义的视图和行为。`getView()`方法是Adapter的核心,它决定了每个列表项如何被渲染。 6. ...
创建一个新的类,继承自`SimpleAdapter`。这个类需要重写`getView()`方法,这是适配器中决定每个列表项视图如何显示的关键方法。 ```java public class CustomSimpleAdapter extends SimpleAdapter { private ...
1. 创建一个新的Adapter类:这个类需要继承自Android提供的BaseAdapter或RecyclerView.Adapter。BaseAdapter适用于ListView、GridView等,而RecyclerView.Adapter适用于RecyclerView。 2. 实现必要的方法: - `...
5. **自定义Adapter** - 当系统提供的Adapter不能满足需求时,可以继承BaseAdapter并重写其方法,如`getView()`,`getCount()`,`getItem()`等,以实现自定义的视图展示和数据处理逻辑。 6. **Adapter优化** - ...
- 在Android中,通常我们会创建一个继承自BaseAdapter的自定义Adapter,然后在Adapter的`getView()`方法中根据数据创建或复用View。 - 数据通常存储在一个列表(如ArrayList)中,每个元素代表ListView的一行。...
在Android开发过程中,适配器(Adapter)是一种非常重要的设计模式,它主要应用于数据与UI之间的桥梁搭建,使得视图能够灵活地展示来自不同数据源的数据。简单来说,适配器就像是一个中介者,将复杂的数据结构转换成...