Android 如何将简单列表项目更改为自定义列表?

Android 如何将简单列表项目更改为自定义列表?,android,sqlite,android-listview,Android,Sqlite,Android Listview,我为从数据库获取数据并在listView中显示而编写了这段代码。我想用3个文本视图和1个图像视图在自定义列表中显示我的数据。我该怎么做 这是我的代码: private void Name() { ListView tvName = (ListView) findViewById(R.id.lvListOfObject); DataBase infoName = new DataBase(this); infoName.open();

我为从数据库获取数据并在listView中显示而编写了这段代码。我想用3个文本视图和1个图像视图在自定义列表中显示我的数据。我该怎么做

这是我的代码:

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));
private void Name(){
ListView tvName=(ListView)findViewById(R.id.lvListoFoObject);
数据库infoName=新数据库(此数据库);
infoName.open();
ArrayList dataName=infoName.getDataName();
infoName.close();
tvName.setAdapter(新阵列适配器)(此,
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;
    }
}
package com.kalagar.warehouse;
导入java.util.ArrayList;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
公共类数据库{
私有静态最终字符串LOGTAG=“WAREHOUSE”;
私有静态最终字符串数据库\u TABLE=“WareHouse”;
私有静态最终int数据库_VERSION=1;
私有静态最终字符串数据库\u NAME=“SellList”;
公共静态最终字符串行_ID=“_ID”;
公共静态最终字符串行\u NAME=“nameOfObject”;
公共静态最终字符串行\u KHARID=“ghBuy”;
公共静态最终字符串行\u FOROUSH=“ghSell”;
公共静态最终字符串行\u PICTURE=“PICTURE”;
私有静态最终字符串表\u CREATE=“CREATE TABLE”+数据库\u TABLE
+(“+行ID+”整数主键自动递增,“+行名称”
+“文本,”+ROW_KHARID+“数字,”+ROW_FOROUSH
+“数字,“+行\图片+”文本“+”;
私人仓库帮助我们的助手;
私人最终语境;
私有SQLITE数据库;
私有静态类WareHouseDdbHelper扩展了SQLiteOpenHelper{
公共仓库管理员(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(创建表);
Log.i(LOGTAG,“表已创建”);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在,则删除表”+数据库_表);
onCreate(db);
}
}
公共数据库(上下文c){
ourContext=c;
}
公共数据库open()引发SQLException{
ourHelper=新仓库管理员(ourContext);
ourDatabase=ourHelper.getWritableDatabase();
归还这个;
}
公众假期结束(){
ourHelper.close();
}
公共长createEntry(字符串名称、字符串kharid、字符串foroush){
ContentValues cv=新的ContentValues();
cv.put(行名称、名称);
cv.put(哈里德,哈里德街);
cv.put(第四排,第四排);
返回ourDatabase.insert(DATABASE_TABLE,null,cv);
}
公共ArrayList getDataName(){
String[]columns=新字符串[]{ROW_ID,ROW_NAME,ROW_ID,
第四排};
游标c=ourDatabase.query(数据库表、列、null、null、,
空,空);
ArrayList结果=新建ArrayList();
int iRow=c.getColumnIndex(行ID);
int iName=c.getColumnIndex(行名称);
int iKharid=c.getColumnIndex(ROW_KHARID);
int iForoush=c.getColumnIndex(ROW_FOROUSH);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
结果.添加(c.getString(iRow)+“”+c.getString(iName)+“”
+c.getString(iKharid)+“”+c.getString(iForoush));
}
返回结果;
}
}

为此,您需要一个自定义列表视图。首先,您应该在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;
} 
}

Source

您可以为此使用自定义listview适配器

这里有一些例子

按照以下步骤操作:

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

    ListView tvName = (ListView) findViewById(R.id.lvListOfObject);
    CustomAdapter adapter = new CustomAdapter(this, List<RowItem>());
    tvName.setAdapter(adapter);
    
    ListView-tvName=(ListView)findviewbyd(R.id.lvListOfObject);
    CustomAdapter=新的CustomAdapter(这个,List());
    tvName.setAdapter(适配器);
    
  • 您可以按照本教程进行操作


    您可以为此使用自定义listView适配器。请检查此链接检查我在此[link][1]中的答案肯定会对您有所帮助[1]:您需要使用自定义布局和自定义适配器
    ListView tvName = (ListView) findViewById(R.id.lvListOfObject);
    CustomAdapter adapter = new CustomAdapter(this, List<RowItem>());
    tvName.setAdapter(adapter);