【问题标题】:How to change simple_list_item_1 to custom list ?如何将 simple_list_item_1 更改为自定义列表?
【发布时间】:2014-03-05 06:19:45
【问题描述】:

我编写此代码是为了从数据库中获取数据并显示在 listView 中。我想用 3 个 textView 和 1 个 ImageView 在我的自定义列表中显示我的数据。我该怎么做?

这是我的代码:

private void Name() {
        ListView tvName = (ListView) findViewById(R.id.lvListOfObject);
        DataBase infoName = new DataBase(this);
        infoName.open();
        ArrayList<String> dataName = infoName.getDataName();
        infoName.close();
        tvName.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, dataName));

这是我的数据库:

package com.kalagar.warehouse;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBase {

    private static final String LOGTAG = "WAREHOUSE";

    private static final String DATABASE_TABLE = "WareHouse";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "SellList";

    public static final String ROW_ID = "_id";
    public static final String ROW_NAME = "nameOfObject";
    public static final String ROW_KHARID = "ghBuy";
    public static final String ROW_FOROUSH = "ghSell";
    public static final String ROW_PICTURE = "picture";

    private static final String TABLE_CREATE = "CREATE TABLE " + DATABASE_TABLE
            + " (" + ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ROW_NAME
            + " TEXT, " + ROW_KHARID + " NUMERIC, " + ROW_FOROUSH
            + " NUMERIC, " + ROW_PICTURE + " TEXT " + ")";

    private WareHouseDdbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class WareHouseDdbHelper extends SQLiteOpenHelper {

        public WareHouseDdbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(TABLE_CREATE);
            Log.i(LOGTAG, "Table has been create");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE);
            onCreate(db);
        }

    }

    public DataBase(Context c) {
        ourContext = c;
    }

    public DataBase open() throws SQLException {
        ourHelper = new WareHouseDdbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        ourHelper.close();
    }

    public long createEntry(String name, String kharid, String foroush) {
        ContentValues cv = new ContentValues();
        cv.put(ROW_NAME, name);
        cv.put(ROW_KHARID, kharid);
        cv.put(ROW_FOROUSH, foroush);
        return ourDatabase.insert(DATABASE_TABLE, null, cv);

    }

    public ArrayList<String> getDataName() {
        String[] columns = new String[] { ROW_ID, ROW_NAME, ROW_KHARID,
                ROW_FOROUSH };
        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
                null, null);
        ArrayList<String> result = new ArrayList<String>();

        int iRow = c.getColumnIndex(ROW_ID);
        int iName = c.getColumnIndex(ROW_NAME);
        int iKharid = c.getColumnIndex(ROW_KHARID);
        int iForoush = c.getColumnIndex(ROW_FOROUSH);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            result.add(c.getString(iRow) + " " + c.getString(iName) + " "
                    + c.getString(iKharid) + " " + c.getString(iForoush));
        }

        return result;
    }
}

【问题讨论】:

标签: android sqlite android-listview


【解决方案1】:

为此,您首先需要一个自定义列表视图,您应该在 main.xml(只是一个 eg)文件中添加一个列表视图,然后创建一个这样的类

public class MySimpleArrayAdapter extends ArrayAdapter<String> {
      private final Context context;
      private final String[] values;
      DataHelper dh;

      public MySimpleArrayAdapter(Context context, int textViewResourceId, String[] values) {
        super(context, textViewResourceId, values);
        this.context = context;
        this.values = values;

        dh=new DataHelper(getApplicationContext());
      }

      @Override
      public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_name, parent, false);
       textView = (TextView) rowView.findViewById(R.id.textname);

        textView.setText(values[position]);
        // Change the icon for Windows and iPhone
        textView.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) 
               {
                   Toast.makeText(this,""+values[position],10000).show();
               }
               });


        return rowView;
} 
}

R.layout.list_name 这将是新的 xml 文件,它将内容加载到列表视图

你的 on create 方法的最后一步就是这样做

con = (ListView) findViewById(R.id.main_listView); 
 MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(MainActivity.this,  R.id.main_listView ,data);// data is String array valu to be added in list view
    //setting the adapter
    con.setAdapter(adapter);

来源link

【讨论】:

    【解决方案2】:

    您可以为此使用自定义列表视图适配器。

    这里有一些例子。

    Android Custom ListView with Image and Text

    Using lists in Android (ListView) - Tutorial

    【讨论】:

      【解决方案3】:

      按照以下步骤操作:

      1. 为列表视图的列表项创建 XML。
      2. 为那些将显示为列表项的数据创建一个POJO 类。
      3. 使用该 XML 创建自定义适配器。使用BaseAdapter 创建自定义适配器。
      4. 假设您创建了一个名为CustomAdapter.java 的自定义适配器和一个名为RowItem.javaPOJO 类。现在将此适配器分配给Listview,如下所示...

        ListView tvName = (ListView) findViewById(R.id.lvListOfObject);
        CustomAdapter adapter = new CustomAdapter(this, List<RowItem>());
        tvName.setAdapter(adapter);
        

      您可以按照本教程...

      Android: Custom ListView with Image and Text using BaseAdapter

      ListView using BaseAdapter – Android

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 2012-12-08
        • 1970-01-01
        • 2012-07-15
        • 2022-01-11
        相关资源
        最近更新 更多