在 Android 中将变量传递到游标适配器的绑定视图

Passing a variable into bindview of a cursor adapter in Android

我有一个游标适配器来根据查询填充列表视图,我想通过在适配器中传递一个变量来控制列表视图的布局我执行以下操作

public class QueryCursorAdapter extends CursorAdapter{
View retView;
private DBHelper mHelper;
public QueryCursorAdapter(Context context, Cursor c,int QCase) {
    super(context, c, QCase);
}

不应该像

那样把变量也放在绑定视图中
public void bindView(View view, Context context, Cursor cursor,int qcase) 

为什么它说我需要将 class 声明为抽象?

有没有其他方法可以根据我在 sqlite 中的查询类型来控制布局?

看看 bindView 方法 - 它只能接受 3 个定义的参数。

当你说你的 class extends CursorAdapter 时,你应该实现这个方法,因为它在 CursorAdapter 中声明为 abstract

因此,您应该在 bindView 的实现中只放置这 3 个参数。当你输入第四个参数时,系统认为它不是基方法的实现,而是你自己的方法。
这就是为什么您收到有关将 class 声明为 abstract 的消息的原因,因为您没有实现基本抽象方法。

您可以将所需的参数传递给构造函数(就像您现在所做的那样)并将其保存到 class.

的相应字段中 然后,在 bindView 方法中,您可以根据需要使用此字段。

Upd. 此外,您可以根据需要使用任意数量的参数 - 只需创建自己的构造函数,例如 CursorAdapter(Context context, Cursor c, param1, param2 ... paramN) 并在其中不要忘记调用基础构造函数 CursorAdapter(Context context, Cursor c)。将您的参数保存到 class 字段中,然后根据需要在 bindView 和其他方法中使用它们。

Upd2. 代码示例:

public class QueryCursorAdapter extends CursorAdapter{
View retView;
private int myParam1, myParam2, myParam3;
private DBHelper mHelper;

public QueryCursorAdapter(Context context, Cursor c, int param1, int param2, int param3) {
    super(context, c);
    myParam1 = param1;
    myParam2 = param2;
    myParam3 = param3;
}

然后你可以在你的适配器中的任何地方使用这些 myParam1-2-3。