2012-07-25 53 views
0

我的應用程序需要在列表中顯示數據,我瀏覽了一些教程並想出了使用header.xml和row.xml。它工作正常,但現在我想添加更多的東西在我的header.xml,我發現整個header.xml滾動與row.xml,以及我真的不想。 任何解決方案不需要我重寫並完全改變我的代碼風格?如何在listview中分隔頁眉/頁腳和數據?

活動:

公共類HistoryActivity延伸ListActivity {

private static final String TAG = "HistoryActivity"; 
ListView lv; 
SimpleAdapter sd; 

RecordDAO dao = new RecordDAO(HistoryActivity.this); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    lv = getListView(); 
    lv.addHeaderView(getLayoutInflater().inflate(
      R.layout.header, null, false)); 


} 

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    ArrayList<Record> Records = new ArrayList<Record>(); 
    Records = (ArrayList<Record>) dao.findAll(); 


    ArrayList<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>(); 
    HashMap<String, String> map; 

    for (int x = Records.size()-1; x >=0; x--) 
    { 
     map = new HashMap<String, String>(); 
     map.put(....// all my data 

     aList.add(map); 
    } 

    sd = new SimpleAdapter(this, aList, R.layout.row, 
      new String[] 
      { "date", "name", "time", 
        "rating" }, new int[]    
      { R.id.date, R.id.name, R.id.time, 
        R.id.rating}); 


    lv.setAdapter(sd); 

    lv.setOnItemClickListener(new OnItemClickListener() 
    { 

     public void onItemClick(AdapterView<?> arg0, View view, int arg2, 
       long arg3) 
     { 
      TextView tx = (TextView) view.findViewById(R.id.date); 
      String s = tx.getText().toString(); 
      Intent intent = new Intent(HistoryActivity.this, EditRecordActivity.class); 
      intent.putExtra("date", s); 
      startActivity(intent); 

     } 
    }); 

} 

private void insertNewRecord() 
{ 
    dao.add(newRecord); 
} 

}

header.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:clickable="true" 
    android:orientation="vertical" > 


    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:orientation="horizontal" 
     android:paddingBottom="6dip" 
     android:paddingTop="4dip" > 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Date" 
      android:textColor="#FFFFFF" 
      android:textSize="16dp" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="name" 
      android:textColor="#FFFFFF" 
      android:textSize="16dp" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Time" 
      android:textColor="#FFFFFF" 
      android:textSize="16dp" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Rating" 
      android:textColor="#FFFFFF" 
      android:textSize="16dp" /> 
    </LinearLayout> 

</LinearLayout> 

row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:paddingBottom="6dip" 
    android:paddingTop="4dip" > 

    <TextView 
     android:id="@+id/date" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="15dp" 
     android:layout_weight="1" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/time" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/Rating" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textColor="#FFFFFF" /> 

</LinearLayout> 

回答

0

請勿使用ListActivity。我認爲這是一個不好的做法。使用常規活動。只需將一個ID爲「@android:id/list」的ListView插入到header.xml中即可。

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:clickable="true" 
    android:orientation="horizontal" 
    android:paddingBottom="6dip" 
    android:paddingTop="4dip" > 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Date" 
     android:textColor="#FFFFFF" 
     android:textSize="16dp" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="name" 
     android:textColor="#FFFFFF" 
     android:textSize="16dp" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Time" 
     android:textColor="#FFFFFF" 
     android:textSize="16dp" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Rating" 
     android:textColor="#FFFFFF" 
     android:textSize="16dp" /> 
</LinearLayout> 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
</ListView> 

而且你可以通過執行獲取列表參考: 的ListView LV =(ListView控件)findViewById(R.id.list);

+0

是的,我做過了,請看活動 – 2012-07-25 14:14:04

+0

上的onCreate()我編輯了答案。 – 2012-07-25 14:20:06

+0

但我仍然需要我的row.xml嗎? – 2012-07-25 14:45:06

0

設置ListView的標題意味着它將成爲列表中的第一項,但仍然會與列表本身一起滾動。

就你而言,你可以創建某種佈局(類似於header.xml),並將其放置在ListView之上。

  1. 相反的ListActivity,延長從Activity
  2. 創建定義了一些看法和一個ListView一個main_layout.xml。

main_layout

<include header.xml/> 
<listview> 
0

如果您不希望您的頁眉和頁腳的觀點與你的ListView滾動,然後確保你使用addHeaderView()addFooterView()之前,你打電話給你的setAdapter()方法。我建議將setAdapter()方法移至您的onCreate()方法。

+0

不適用於我的情況,我試過了 – 2012-07-25 14:41:44