通过不同的文本视图分隔适配器输出

Separate the adapter output by different textviews

我有以下代码

public void populateListView() {
        Cursor cursordata = myDb.getAllData();
        ArrayList<String> products = new ArrayList<String>();


        Log.d(LOG_TAG, "cursor data " + cursordata);


        if (cursordata.moveToFirst()) {
            do {

                String productname = cursordata.getString((cursordata.getColumnIndex("product"))) +
                        cursordata.getString((cursordata.getColumnIndex("qty"))) +
                        cursordata.getString((cursordata.getColumnIndex("date_time")));

                products.add(productname);

            } while (cursordata.moveToNext());
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, products);
        ListView listviewman = (ListView)findViewById(R.id.listviewman);
       listviewman.setAdapter(adapter);
    }

它从我的数据库中的产品、数量和 date_time 列中输出一个列表, 但是,它看起来像一个字符串,它可以将产品、数量和 date_time 输出到自定义布局的不同文本视图吗?

您可以构建自定义 Adapter.For 例如自定义适配器如下所示:

public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Movie> movieItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();

public CustomListAdapter(Activity activity, List<Movie> movieItems) {
    this.activity = activity;
    this.movieItems = movieItems;
}

@Override
public int getCount() {
    return movieItems.size();
}

@Override
public Object getItem(int location) {
    return movieItems.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();
    NetworkImageView thumbNail = (NetworkImageView) convertView
            .findViewById(R.id.thumbnail);
    TextView title = (TextView) convertView.findViewById(R.id.title);
    TextView rating = (TextView) convertView.findViewById(R.id.rating);
    TextView genre = (TextView) convertView.findViewById(R.id.genre);
    TextView year = (TextView) convertView.findViewById(R.id.releaseYear);

    // getting movie data for the row
    Movie m = movieItems.get(position);

    // thumbnail image
    thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

    // title
    title.setText(m.getTitle());

    // rating
    rating.setText("Rating: " + String.valueOf(m.getRating()));

    // genre
    String genreStr = "";
    for (String str : m.getGenre()) {
        genreStr += str + ", ";
    }
    genreStr = genreStr.length() > 0 ? genreStr.substring(0,
            genreStr.length() - 2) : genreStr;
    genre.setText(genreStr);

    // release year
    year.setText(String.valueOf(m.getYear()));

    return convertView;
}

}

此处我们在 ListView 中的一个项目的不同 TextView 中设置文本。

感谢大家的指导,但是,我已经按照这个示例进行操作:http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

并通过以下代码成功完成任务:

Cursor cursor = db.getAllData();

        // The desired columns to be bound
        String[] columns = new String[]{
                db.productCOL,
                db.qtyCOL,
        };

        // the XML defined views which the data will be bound to
        int[] to = new int[]{
                R.id.productname,
                R.id.qty,
        };

        // create the adapter using the cursor pointing to the desired data
        //as well as the layout information
        dataAdapter = new SimpleCursorAdapter(
                this, R.layout.row_layout_history,
                cursor,
                columns,
                to,
                0);

        ListView listView = (ListView) findViewById(R.id.tutlist);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);