Android Sqlite和多列问题
我有一个简单的项目与sqlite发送和检索信息为3列。它工作得很好。实际上,我试着用3列adapter->将这些信息放入listView,如下所示: 但当我运行我的应用程序时,我的适配器会重复相同的三次,在这之后,它会为下一篇专栏文章做同样的步骤。 我要做的是从第1列填写textView2信息,从第2列填写textView3信息 这是构建ArrayList并调用Listview和适配器的代码:Android Sqlite和多列问题,android,android-layout,android-sqlite,Android,Android Layout,Android Sqlite,我有一个简单的项目与sqlite发送和检索信息为3列。它工作得很好。实际上,我试着用3列adapter->将这些信息放入listView,如下所示: 但当我运行我的应用程序时,我的适配器会重复相同的三次,在这之后,它会为下一篇专栏文章做同样的步骤。 我要做的是从第1列填写textView2信息,从第2列填写textView3信息 这是构建ArrayList并调用Listview和适配器的代码: private void populateListView() { Cursor data
private void populateListView() {
Cursor data = mDatabaseHelper.getData();
ArrayList<String> listData = new ArrayList<>();
while (data.moveToNext()) {
listData.add(data.getString(1));
listData.add(data.getString(2));
listData.add(data.getString(3));
}
ListDataAdapter adapter = new ListDataAdapter(this, R.layout.adapter_view_layout, listData);
mListView.setAdapter(adapter);
对于适配器:
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
class ListDataAdapter extends ArrayAdapter<String> {
private static final String TAG = "ListDataAdapter";
private Context mContext;
int mResource;
public ListDataAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull ArrayList<String> objects) {
super(context, resource, objects);
mContext = context;
mResource = resource;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
String name = getItem(position).toString();
String sex = getItem(position).toString();
String date = getItem(position).toString();
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(mResource,parent, false);
TextView tvName = (TextView) convertView.findViewById(R.id.textView1);
TextView tvSex = (TextView) convertView.findViewById(R.id.textView2);
TextView tvDate = (TextView) convertView.findViewById(R.id.textView3);
tvName.setText(name);
tvDate.setText(date);
tvSex.setText(sex);
return convertView;
}
}
如何解决这个问题?好吧,您在三个文本视图上设置了相同的字符串,这是意料之中的。 因此,为了实现您的愿望,您必须创建一个包含这3列的新类。让我们把它命名为RowModel。因此,您将使用新类,而不是使用字符串。大概是这样的:
private void populateListView() {
Cursor data = mDatabaseHelper.getData();
ArrayList<RowModel> listData = new ArrayList<>();
while (data.moveToNext()) {
listData.add(new RowModel(data.getString(1), data.getString(2), data.getString(3));
}
ListDataAdapter adapter = new ListDataAdapter(this, R.layout.adapter_view_layout, listData);
mListView.setAdapter(adapter);
}
class ListDataAdapter extends ArrayAdapter<RowModel> {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
RowModel model = getItem(position);
String name = model.getName();
String sex = model.getSex();
String date = model.getDate();
// populate TextViews
}
}
那么您的适配器将如下所示:
private void populateListView() {
Cursor data = mDatabaseHelper.getData();
ArrayList<RowModel> listData = new ArrayList<>();
while (data.moveToNext()) {
listData.add(new RowModel(data.getString(1), data.getString(2), data.getString(3));
}
ListDataAdapter adapter = new ListDataAdapter(this, R.layout.adapter_view_layout, listData);
mListView.setAdapter(adapter);
}
class ListDataAdapter extends ArrayAdapter<RowModel> {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
RowModel model = getItem(position);
String name = model.getName();
String sex = model.getSex();
String date = model.getDate();
// populate TextViews
}
}
Eduard对Rowmodel类的外观有何建议?它可以是一个包含3个字段的简单POJO。