看起来有两种可能的方法来改变 ListView
行中的某些内容:
- 使用
setViewBinder
/setViewValue
:
myCursor.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch(viewId) {
case R.id.icon:
// change something related to the icon here
- 使用
getView
/LayoutInflater
:
public View getView(int position,View convertView,ViewGroup parent){
View itemView = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.list_row, null);
} else {
itemView = convertView;
}
ImageView imgViewChecked = (ImageView) itemView
.findViewById(R.id.icon);
// change something related to the icon here
这两种方法有什么区别?
1 回答
您可以使用它们来完成相同的任务 . ViewCinder系统由SimpleCursorAdapter添加,使您更轻松,因此您不必编写整个getView代码 . 实际上,SimpleCursorAdapter只是通过调用setViewValue方法(以及标准样板错误检查和膨胀)来实现getView .
我已经附加了Android源代码在SimpleCursorAdapter中用于getView的实现: