[英]Retrieve array from SQLite in listview with more than a colum (ANDROID)
因此,我想創建一個包含多個列的列表視圖。 我已經成功調用了數據庫, 但是布局仍然無法正常工作。 我認為這是因為我所有的數據都放在一個數組中,很難將它們分成三列。 有人可以為我找到解決方案嗎?
我的程序結果在listview中是這樣的:
John Doe 12 Argentina
Marilyn Rose 32 Russia
Annabella 19 United States
但是我想要的是這樣的:
John Doe 12 Argentina
Marilyn Rose 32 Russia
Annabella 19 United States
根據我的閱讀,我們將需要2個XML。 一個用於列表視圖,另一個用於布局(在文本之間留出空格)。 還有一個.JAVA稱為適配器,用於連接我的MainActivity.java和布局XML。
添加:我已經嘗試使用兩種XML。 一種XML,稱為main。XML用於調用ListView。 而grid.XML是我放置android:layout_alignParentLeft =“ true”的地方(用於創建空間)。 我使用MyAdapter.JAVA在grid.XML中轉換視圖。 在MainActivity.JAVA中,我稱為MyAdapter。 但是,我在MainActivity中的代碼將其連接到MyAdapter時出錯。
這是我的代碼,給出錯誤java.lang.RuntimeException。 所以我不得不刪除它。有關它的更多信息,請檢查最后兩個代碼...
MainActivity.java(錯誤)
public static ArrayList<String> arraydealer = new ArrayList<String>();
MyAdapter bohwat = new MyAdapter(MainActivity.this, arraydealer);
lvcustom.setAdapter(bohwat);
這是運行良好的代碼。 它使用類MainActivity,AstraDB和MySetGet以及main.XML。 其他不起作用的類是MyAdapter和grid.xml
這就是我叫數據庫的方式:
public class MainActivity extends Activity
{
public static ArrayList<String> arraydealer = new ArrayList<String>();
AstraDB astrahandler = new AstraDB(this);
Spinner spDealer;
ListView lvcustom;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvcustom = (ListView)findViewById(R.id.custom_lv);
ShowListView();
}
private void ShowListView()
{
astrahandler.getAllDealer();
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, arraydealer);
lvcustom.setAdapter(adapt);
}
}
Activity中的ArrayList和AstraDB中的String名稱的這段代碼對於將MainActivity與數據庫連接非常重要,但是這似乎在布局中造成了麻煩。 因為它們包含在一個數組中
這是獲取我的數據庫中所有數據的功能。 其在AstraDB.java上:
public List<MySetGet> getAllDealer()
{
List<MySetGet> info = new ArrayList<MySetGet>();
db = DBHelper.getReadableDatabase();
// Select All Query
String selectQuery = "SELECT * FROM Dealer";
cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
MySetGet lets = new MySetGet();
lets.setDealerID(Integer.parseInt(cursor.getString(0)));
lets.setDealerName(cursor.getString(1));
lets.setDealerOwner(cursor.getString(2));
lets.setDealerWil(cursor.getString(3));
String name = cursor.getInt(0) +
"\u00A0 "+ cursor.getString(1)+
"\u00A0 "+ cursor.getString(2)+
"\u00A0 "+ cursor.getString(3);
MainActivity.arraydealer.add(name);
//add
info.add(lets);
} while (cursor.moveToNext());
}
// closing connection
cursor.close();
db.close();
//return contentdealer;
return info;
}
getAllDealer()中的MySetGet與MySetGet.java連接,在其中放置了setter和getter,以便數據可以成為對象。 更像這樣:
public int getDealerID(){ return DealerID;}
public void setDealerID(int DealerID) { this.DealerID = DealerID; }
將其他XML與Java連接的代碼,但仍然出現錯誤:
grid_dealer.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="50dp"
android:id="@+id/col1"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text=""/>
<TextView
android:layout_height="wrap_content"
android:layout_width="100dp"
android:id="@+id/col2"
android:layout_toRightOf="@id/col1"
android:layout_centerVertical="true"
android:text=""/>
MyAdapter.java中的重要代碼:
public class MyAdapter extends BaseAdapter
{
Context context;
ArrayList<MySetGet> dealerlist;
public MyAdapter(Context context, ArrayList<MySetGet>list)
{
this.context = context;
dealerlist = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
MySetGet yay = dealerlist.get(position);
//this is to customize the layout of the listview
if(convertView == null)
{
LayoutInflater inflater = null;
inflater = (LayoutInflater)context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.grid_dealer, null);
}
TextView tvID = (TextView)convertView.findViewById(R.id.col1);
tvID.setText(yay.getDealerID());
TextView tvName = (TextView)convertView.findViewById(R.id.col2);
tvName.setText(yay.getDealerName());
TextView tvOwner = (TextView)convertView.findViewById(R.id.col3);
tvOwner.setText(yay.getDealerOwner());
return convertView;
}
}
請幫我。 我對此很陌生。 有沒有一種方法可以修改我的代碼,而又無需過多更改數據庫的調用方式? 下面的類和XML在顯示數據庫時工作正常,但沒有在各列之間創建整潔的布局空間。 工作類:AstraDB,MainActivity,MySetGet工作XML:main.xml對不起,如果文章變得更長。 我想澄清幾件事,以免造成誤解。
您可以使用android:layout_weight=""
更好地安排視圖
在您的情況下,使用SimpleCursorAdapter
是理想的解決方案。 請在此處簽出一個教程,該教程將帶您完成實現所需目標的步驟。
在simple_list_item_1
布局中,如果彼此相對布置項目,則將獲得與現在一樣的結果。 如果您想要正確的格式設置,請分別使用android:layout_alignParentLeft="true"
, android:centerHorizontal="true"
和android:layout_alignParentRight="true"
將元素與左,中和右相關
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.