簡體   English   中英

從列表視圖中的SQLite中檢索帶有多個列(ANDROID)的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM