2011-10-13 47 views
0

我是Android開發新手。我正在使用ListView列出來自SQLite數據庫的一些數據。 我的main.xml文件看起來像:LIstView在通過光標填充時顯示無數據

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/inspections" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
      <!-- Header --> 
    <LinearLayout android:id="@+id/header" 
     android:background="#ff347c12" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     > 
     <TextView android:id="@+id/item1" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:height="30dip" 
      android:text="Id" 
     /> 
     <TextView android:id="@+id/item2" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:text="Customer" 
      android:width="100dip" 
      android:height="30dip" 
     /> 
     <TextView android:id="@+id/item3" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:text="Contract" 
      android:width="100dip" 
      android:height="30dip" 
     /> 
     <TextView android:id="@+id/item4" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:text="Inspector" 
      android:width="100dip" 
      android:height="30dip" 
     /> 
    </LinearLayout> 

    <!-- List Divider --> 
    <View android:layout_width="fill_parent" 
     android:layout_height="1dip" 
     android:background="?android:attr/listDivider" /> 

    <!-- ListView (grid_items) --> 
    <LinearLayout android:id="@+id/layout" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent"> 
     <ListView android:id="@+id/listview" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent"> 
     </ListView> 
    </LinearLayout> 
</LinearLayout> 

我使用的是用來保存每行的數據grid_item.xml,它看起來像:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <TextView android:id="@+id/item1" 
      android:text="row_id" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="20dip" 
     /> 
     <TextView android:id="@+id/item2" 
      android:text="col_1" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
     /> 
     <TextView android:id="@+id/item3" 
      android:text="col_2" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
     /> 
     <TextView android:id="@+id/item4" 
      android:text="col_3" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
     /> </LinearLayout> 

代碼:

public class Inspections extends Activity{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     try 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.inspections); 

      LoadInspections(); 
     } 
     catch (Exception e) { 
      CommonMethods.ShowMessageBox(this, e.toString()); 
     } 
    } 

    private void LoadInspections() 
    { 
     try 
     { 
      DBAdapter db = new DBAdapter(this); 
      db.open(); 
      Cursor cur = db.GetInspections(); 
      if(cur.moveToFirst()) 
      { 
       startManagingCursor(cur); 
       ListView lv = (ListView)findViewById(R.id.listview); 
       // create the grid item mapping 
       String[] from = new String[] {"_id", "customer", "contract", "inspector"}; 
       int[] to = new int[] {R.id.item1, R.id.item2, R.id.item3, R.id.item4 }; 

       // fill in the grid_item layout 
       SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.grid_item, cur, from, to); 

       lv.setAdapter(adapter); 
       Log.d("Inspection", "Records found " + cur.getString(1) + "/ "+ cur.getString(2)+ "/ "+ cur.getString(3)); 
      } 
      else 
      { 
       Log.d("Inspection", "No reords"); 
      } 

      db.close(); 
     } 
     catch(Exception ex) 
     { 
      Log.d("Inspection", "Error: "+ ex.toString()); 
     } 
    } 
} 

問題: LoadInspections()有問題,列表視圖不顯示任何數據,只顯示HEADER-ROW。光標正在檢索數據,請檢查以下行:

Log.d("Inspection", "Records found " + cur.getString(1) + "/ "+ cur.getString(2)+ "/ "+ cur.getString(3)); 

日誌窗口正在顯示數據。

我盡了最大努力在stackoverflow上找到答案,但無法成功。 在此先感謝您寶貴的時間&幫助。

回答

0

我嘗試不同的事情& 當我刪除了「頭」 &「列出除法」從我main.xml中的部分,它的工作。很奇怪??

所以我的main.xml現在看起來像:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/inspections" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- ListView (grid_items) --> 
    <LinearLayout android:id="@+id/layout" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent"> 
     <ListView android:id="@+id/mylistview" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent"> 
     </ListView> 
    </LinearLayout> 
</LinearLayout> 

可以在列表視圖的這種奇怪的行爲有人對此有何評論?

0

您可能已經發現了,但主要的LinearLayout具有水平方向。您將添加的每個子視圖都將在其旁邊水平添加。由於您的第一個視圖「@ + id/header」佔據了屏幕的整個寬度,所以其他視圖將被添加到屏幕之外。

如果將「@ + id/inspections」的方向更改爲「垂直」,則所有視圖都將可見。