使用 customloader 和自定义适配器显示 sqlite 数据
displaying sqlite data using customloader and custom adapter
我想使用 CustomAdapter
在列表视图中显示 sqlite 数据。
以下 link 有助于仅显示列表中的单个项目。
请帮我在一行中显示多个项目。
首先,创建新的 class 来扩展 CursorAdapter 并为其命名。这个新的 CursorAdapter class 必须实现继承的抽象方法如下:
public class MyCursorAdapter extends CursorAdapter {
// Default constructor
public MyCursorAdapter(Context context, Cursor cursor, int flags) {
...
}
public void bindView(View view, Context context, Cursor cursor) {
...
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
...
return null;
}
}
接下来定义MyCursorAdapter的方法
在BaseAdapter中,view是在getView方法中创建的;然而,在 CursorAdapter 中,视图是在 newView() 方法中创建的,元素是在 bindView() 中填充的。在 newView() 方法中,您只需膨胀视图您的自定义 xml 和 return 它。在 bindView() 方法中,您设置视图的元素。这是代码:
public void bindView(View view, Context context, Cursor cursor) {
TextView textViewTitle = (TextView) view.findViewById(R.id.articleTitle);
String title = cursor.getString( cursor.getColumnIndex( MyTable.COLUMN_TITLE ) )
textViewTitle.setText(title);
...
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// R.layout.list_row is your xml layout for each row
return cursorInflater.inflate(R.layout.list_row, parent, false);
}
}
然后在Activity,由于从数据库加载数据是繁重的工作,我们将在线程中加载数据。如果您没有在自己的线程中显式启动 CursorAdapter,那么它将在主 (UI) 线程中 运行,这可能会引起用户的注意,因为界面不稳定或响应缓慢。这里我们将使用 android Handler
public class ActivitySample extends Activity {
MyCursorAdapter customAdapter;
private Cursor mCursor;
private ListView listView;
// Default constructor
public onCreate(Bundle savedInstanceState) {
...
listView = (ListView) findViewById(R.id.activity_sample_layout);
// Your database schema
String[] mProjection = {
MyTable.COLUMN_ID,
MyTable.COLUMN_TITLE,
};
// Here we query database
mCursor = getContentResolver().query(
MyAdContentProvider.CONTENT_URI,
mProjection,
null,
null,
null);
listView.setOnItemClickListener(new OnItemClickListener() {
...
}):
}
new Handler().post(new Runnable() {
@Override
public void run() {
customAdapter = new MyCursorAdapter(
ActivitySample.this,
mCursor,
0);
listView.setAdapter(customAdapter);
}
});
}
如果对您有帮助请采纳
我想使用 CustomAdapter
在列表视图中显示 sqlite 数据。
以下 link 有助于仅显示列表中的单个项目。
请帮我在一行中显示多个项目。
首先,创建新的 class 来扩展 CursorAdapter 并为其命名。这个新的 CursorAdapter class 必须实现继承的抽象方法如下:
public class MyCursorAdapter extends CursorAdapter {
// Default constructor
public MyCursorAdapter(Context context, Cursor cursor, int flags) {
...
}
public void bindView(View view, Context context, Cursor cursor) {
...
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
...
return null;
}
}
接下来定义MyCursorAdapter的方法
在BaseAdapter中,view是在getView方法中创建的;然而,在 CursorAdapter 中,视图是在 newView() 方法中创建的,元素是在 bindView() 中填充的。在 newView() 方法中,您只需膨胀视图您的自定义 xml 和 return 它。在 bindView() 方法中,您设置视图的元素。这是代码:
public void bindView(View view, Context context, Cursor cursor) {
TextView textViewTitle = (TextView) view.findViewById(R.id.articleTitle);
String title = cursor.getString( cursor.getColumnIndex( MyTable.COLUMN_TITLE ) )
textViewTitle.setText(title);
...
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// R.layout.list_row is your xml layout for each row
return cursorInflater.inflate(R.layout.list_row, parent, false);
}
}
然后在Activity,由于从数据库加载数据是繁重的工作,我们将在线程中加载数据。如果您没有在自己的线程中显式启动 CursorAdapter,那么它将在主 (UI) 线程中 运行,这可能会引起用户的注意,因为界面不稳定或响应缓慢。这里我们将使用 android Handler
public class ActivitySample extends Activity {
MyCursorAdapter customAdapter;
private Cursor mCursor;
private ListView listView;
// Default constructor
public onCreate(Bundle savedInstanceState) {
...
listView = (ListView) findViewById(R.id.activity_sample_layout);
// Your database schema
String[] mProjection = {
MyTable.COLUMN_ID,
MyTable.COLUMN_TITLE,
};
// Here we query database
mCursor = getContentResolver().query(
MyAdContentProvider.CONTENT_URI,
mProjection,
null,
null,
null);
listView.setOnItemClickListener(new OnItemClickListener() {
...
}):
}
new Handler().post(new Runnable() {
@Override
public void run() {
customAdapter = new MyCursorAdapter(
ActivitySample.this,
mCursor,
0);
listView.setAdapter(customAdapter);
}
});
}
如果对您有帮助请采纳