如何为不同的列设置不同的textview

时间:2015-06-11 23:26:47

标签: java android sqlite

我有一个java类正在从android sqllite中的数据库中检索两列。是否可以将不同的textviews布局属性设置为两列?如果是,我希望知道要走的路。

这是我到目前为止所做的。

我的textview布局属性

<----Main Title---->
<TextView
android:id="@+id/firstLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:textSize="14sp"
android:textStyle="bold" />

<!-- Subtitle-->
<TextView
android:id="@+id/secondLine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/firstLine"
android:layout_below="@id/firstLine"
android:textSize="12sp"
 />

这是从数据库中查询数据的方法

    /**
     * DISPLAY RESULTS
     */

    //Create Cursor object to read notification from the table
    Cursor c = db.rawQuery("SELECT ID,NOTIFICATIONS FROM notices order by ID desc", null);

    //If Cursor is valid
    if (c != null ) {
        Toast.makeText(Notification.this, "Query is valid", Toast.LENGTH_LONG).show();

        //Move cursor to first row
        if  (c.moveToFirst()) {
            do {

                String Name = c.getString(c.getColumnIndex("NOTIFICATIONS"));

               int Ids = c.getInt(c.getColumnIndex("ID"));

                //Add the notification to Arraylist 'results'
                results.add(Name);


            }while (c.moveToNext()); //Move to next row
        }
    }


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    R.layout.notification_textview,R.id.firstLine, results);


    // Assign adapter to ListView
    listView.setAdapter(adapter); 

在这种情况下,我希望为firstLine列设置Name textview属性,并为secondLine列设置Ids textview属性。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,这很简单。

创建一个自定义布局XML文件,表示res/layout文件夹中列表视图的每一行。我们称之为list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="24px" >
</TextView>

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="16px" >
</TextView>

</LinearLayout>

正如您所看到的,其中有两个TextView,ID为text1text2 现在,我们使用SimpleAdapter

代替仅适用于极其简单列表的ArrayAdapter
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.list_row, new String[] { "text1", "text2" },
 new int[] { R.id.text1, R.id.text2 });
listView.setAdapter(adapter);

现在这里是棘手的部分。变量数据实际上是Map对象的ArrayList,每个映射都应该包含带键#34; text1&#34;和&#34; text2&#34;。它可以像这样创建:

data = new ArrayList<Map<String, Object>>;

for (int i=0; i<results.size(); i++){
    Map<String, Object> hm = new HashMap<String, Object>();
    hm.put("text1", mainTitles.get(i));
    hm.put("text2", subtitles.get(i));
    data.add(hm);
}

假设所有第一行都存储在列表mainTitles中,第二行存储在列表subtitles