我有一个带有按钮的视图和一个列表视图,由包含bindView()和newView()的光标适配器支持,用于自定义视图。列表的每一行都包含一个Text和一个复选框。每个视图的数据来自数据库。我正在光标适配器构造函数中传递我的数据库适配器。当复选框被选中或取消选中时,我用它来更新数据库(效果很好)。当然,我对光标运行“重新查询”并view.refreshDrawableState())。这是个好主意吗?什么是更好的解决方案?
第二个问题更严重,当按钮被单击时,它会启动一个新活动。从新活动中点击后退按钮后,我返回了我的列表视图。但是当我这次尝试单击复选框时,我得到了数据库关闭异常。为什么?如何修复此错误?
以下是列表视图和代码片段。
Button --------> Starts a new activity
复选框|文本视图
复选框|文本视图
MyActivity.java
onCreate() {
...
Button add_item_btn = (Button) findViewById(R.id.add_item_btn_id);
add_item_btn.setOnclickListener(new OnClickListener() {
//Start a new activity
});
}
protected void onPause() {
adapter.close();
mCursor.close();
}
protected void onResume() {
mListView = getListView();
adapter = new DBAdapter(getApplication());
adapter.open();
mCursor = adapter.getAllItems();
mCustomAdapter = new MyCursorAdapter(MyActivity.this, mCursor, adapter);
mListView.setAdapter(mCustomAdapter);
}
public class MyCursorAdapter extends CursorAdapter {
Cursor mCursor;
DBAdapter adapter;
public MyCursorAdapter(Context context, Cursor c, DBAdapter _adapter) {
...
mCursor = c;
adapter = _adapter;
}
public void bindView(final View view, Context context, final Cursor cursor) {
final CheckBox itemStatusCB = (CheckBox)
view.findViewById(R.id.item_status_id);
idx = cursor.getColumnIndex(myItem.ITEM_STATUS);
final long itemStatus = cursor.getLong(idx);
if (itemStatus == 1) {
itemStatusCB.setChecked(true);
} else {
itemStatusCB.setChecked(false);
}
itemStatusCB.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
int newStatus = 0;
if (((CheckBox) v).isChecked()) {
newStatus = 1;
}
adapter.updateItemStatus(itemId, newStatus);
mCursor.requery();
view.refreshDrawableState();
});
}
}}
我能够解决这个问题。调用的新活动在onStart()上打开了DB连接,在onDestroy()上关闭了DB连接。从那个活动返回后,我得到了数据库非法状态异常错误,如堆栈跟踪所述。我认为它返回了DB连接的缓存版本。一旦我删除了DB。在来宾活动中,它停止发出database not open错误。通常,您会认为每个活动都可以在其onResume()或onStart()中打开DB连接,并在其onPause()或onStop()或onDestroy()中关闭DB连接,并且不会影响跨活动的连接。这有意义吗?
我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。
问题内容: 嗨,您想创建一个自定义光标适配器,以便显示2行文本的图像。我在理解自定义光标适配器时遇到了一些麻烦,但是我不明白如何添加要从数据库路径填充的imageview。 问题答案: 将, 实际上,我已经实现了与您正在寻找的东西非常相似的东西。这是我的实现。 XML只是万一… 根据特定条件,这将在文本的两行显示最多2幅图像。 希望这可以为您的工作打下基础! 祝好运 :]
我已经为android adapter view上的read onclick项编写了一个代码, 我正在传递它正在使用的信息 在我的第二个类页面上显示如下输出: {描述=关于选定的描述,标题=选定的标题} 我只想知道如何分别显示描述和标题。 如: 所选标题(显示在一个文本视图上)关于所选内容的说明(显示在另一个文本视图上) 第一类 ------------ public void onItemCli
我正在开发一个聊天应用程序,我正在使用光标适配器来显示聊天列表。聊天备份在服务器上,我们加载了更多聊天功能,允许用户从服务器获取他的最后50次聊天。 此loadmore按钮位于列表的顶部。 因此,当我将这些新聊天添加到我的数据库并交换光标以重新加载listview时,listview滚动位置不会被维护,列表会转到顶部,这不是正确的行为。我想保持listview滚动位置,就像按下load more聊
我很难用简单的游标适配器从sqlite数据库填充微调器。我必须使用一个简单的游标适配器,而不是数组适配器。我的主要活动、函数和xml文件如下: 功能如下: xml文件在下面; 当我运行应用程序时,将显示以下屏幕。有数据,但似乎是空的。我有_ id,列的名称。 空微调器 谢谢你的帮助。
我有一个光标适配器显示的项目列表,当我使用时,我得到了正确的行并且能够做我需要的事情(我的目标是在单击时向该项目添加视图。现在我需要在单击单元格中的按钮时发生此操作。但是,按钮单击事件不会返回正确的单元格,而是随机返回列表中的其他单元格,这是我的代码中的一个示例: 在这个示例代码中,我想要单击单元格中的按钮,让我访问按钮真正所在的视图,但是我从随机列表单元格中获取视图,如何在我的单击侦听器中获取正