从列表视图中的SQLite检索具有多个列的数组(ANDROID)

时间:2014-08-22 04:44:01

标签: android sqlite listview

所以我想创建一个包含多个列的列表视图。我已经成功地称为数据库,但布局仍然不起作用。我认为这是因为我的所有数据都放在一个数组中,很难将它们分成三列。谁能为我找到解决方案?

我的程序结果在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);
}
}

AstraDB中的Activity和String名称中的ArrayList代码对于将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; }

使用Java连接其他XML但仍然出错的代码:

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 对不起,如果帖子变长了。我想澄清一些事情,以免产生误解。

3 个答案:

答案 0 :(得分:1)

您可以使用android:layout_weight=""来更好地安排观看次数

答案 1 :(得分:0)

在您的情况下,使用SimpleCursorAdapter是理想的解决方案。请查看教程here,该教程将指导您完成实现目标的步骤。

答案 2 :(得分:0)

simple_list_item_1布局中,如果您相对于彼此安排项目,您将获得现在获得的结果。如果您想要正确的格式,请分别使用android:layout_alignParentLeft="true"android:centerHorizontal="true"android:layout_alignParentRight="true"将元素关联到左侧,中间和右侧