Android 如何将简单列表项目更改为自定义列表?
我为从数据库获取数据并在listView中显示而编写了这段代码。我想用3个文本视图和1个图像视图在自定义列表中显示我的数据。我该怎么做 这是我的代码: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();
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适配器 这里有一些例子 按照以下步骤操作:
POJO
类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);