Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Sqlite和多列问题_Android_Android Layout_Android Sqlite - Fatal编程技术网

Android Sqlite和多列问题

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

我有一个简单的项目与sqlite发送和检索信息为3列。它工作得很好。实际上,我试着用3列adapter->将这些信息放入listView,如下所示:

但当我运行我的应用程序时,我的适配器会重复相同的三次,在这之后,它会为下一篇专栏文章做同样的步骤。

我要做的是从第1列填写textView2信息,从第2列填写textView3信息

这是构建ArrayList并调用Listview和适配器的代码:

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。