如何在Android中使用CursorAdapter使用自定义视图扩展ListView?

如何在Android中使用CursorAdapter使用自定义视图扩展ListView?,android,android-listview,android-custom-view,android-cursoradapter,Android,Android Listview,Android Custom View,Android Cursoradapter,我需要创建一个布局,其中包括不同宽度和颜色的矩形列表。因此,我决定创建一个自定义视图,它绘制一个矩形,并创建一个子类CursorAdapter,它将用我的矩形填充ListView,用来自Cursor的数据设置它们的大小和颜色 我试图在newView()方法中创建视图并将其添加到root,但它不起作用 我是否需要创建一些布局并在newView()中将其充气?我应该如何设置矩形的大小和颜色 我读过,但它与我的问题毫无共同之处。请先阅读问题,然后再将其标记为已回答 更新 @Override publ

我需要创建一个布局,其中包括不同宽度和颜色的矩形列表。因此,我决定创建一个自定义视图,它绘制一个矩形,并创建一个子类
CursorAdapter
,它将用我的矩形填充
ListView
,用来自Cursor的数据设置它们的大小和颜色

我试图在
newView()
方法中创建视图并将其添加到root,但它不起作用

我是否需要创建一些布局并在
newView()中将其充气?我应该如何设置矩形的大小和颜色

我读过,但它与我的问题毫无共同之处。请先阅读问题,然后再将其标记为已回答

更新

 @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    //View is created programmatically
    //Set color depending on context type.
    View view = LayoutInflater.from(context).inflate(R.layout.record_item_layout, parent, false);
    Log.i(LOG_TAG, "(newView)new view have been created");

    return view;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    Log.i(LOG_TAG, "(bindView) binding to out view");

    int colorId = cursor.getInt(cursor.getColumnIndex(TrackerContract.UserRecordsEntry.COLUMN_CONTEXT_ID));

    RecordView recordView = (RecordView) view;

    //These layout params we need to set height to MAX, and width depending on record duration.
    recordView.setLayoutParams(new ViewGroup.LayoutParams(200, ViewGroup.LayoutParams.MATCH_PARENT));
    recordView.setColorId(colorId);
    recordView.invalidate();

    //do something?
}
<?xml version="1.0" encoding="utf-8"?>

<mypackage.RecordView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:id="@+id/record_view"
    custom:colorId="5"/>
@覆盖
公共视图newView(上下文上下文、光标、视图组父对象){
//视图是以编程方式创建的
//根据上下文类型设置颜色。
视图=布局更平坦。从(上下文)。充气(R.layout.record\u item\u布局,父项,false);
Log.i(Log_标记,“(newView)已创建新视图”);
返回视图;
}
@凌驾
公共void bindView(视图、上下文上下文、光标){
Log.i(Log_标记,“(bindView)绑定到out视图”);
int colorId=cursor.getInt(cursor.getColumnIndex(TrackerContract.UserRecordsEntry.COLUMN_CONTEXT_ID));
记录视图记录视图=(记录视图)视图;
//我们需要将这些布局参数的高度设置为“最大”,而宽度则取决于记录的持续时间。
recordView.setLayoutParams(新的ViewGroup.LayoutParams(200,ViewGroup.LayoutParams.MATCH_PARENT));
setColorId(colorId);
recordView.invalidate();
//做点什么?
}

我自己解决了这个问题。在
newView()
方法中为自定义视图充气的最简单方法是创建包含该项的布局。就我而言

<?xml version="1.0" encoding="utf-8"?>

<mypackage.RecordView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:id="@+id/record_view"
    custom:colorId="5"/>


之后,我可以在
bindView()
方法中更改视图大小和颜色

我们需要看一些代码。此外,请详细解释“它不工作”的含义。请记住,
newView()
中没有“将其添加到根目录”
--
ListView
负责执行此操作。“我是否需要创建一些布局并在newView()中对其进行充气?”--大概是这样。“我应该如何设置矩形的大小和颜色?”--在
bindView()
中这样做取决于您的需要,但
SimpleCursorAdapter
+
SimpleCursorAdapter.ViewBinder
在常见情况下效果良好