4

커서를 listview에서 올바르게 표시하려고했습니다. 커서가 데이터를 올바르게 검색 할 수 있도록 토스트를 사용할 때 올바르게 표시되지만 목록 형식으로 표시하는 데 문제가 있습니다.안드로이드 - ListView에 DB에서 커서 결과 표시

각 행마다 6 개 열이어야합니다.

데이터가없는 행 하나만 표시합니다. 아주 기본적인 문제라고 확신합니다. 아마도 누군가 내가 잘못 가고 있다고 말할 수 있습니다. 감사 할 것입니다.

DisplayCursor.Java

public class DisplayCursor extends ListActivity 
{ 
MyDBManager db = new MyDBManager(this); 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_cursor); 

    db.open(); 
    Cursor cursor = db.getAllRows(); 
    startManagingCursor(cursor); 

    String[] columns = new String[] { MyDBManager.KEY_DESCRIPTION, MyDBManager.KEY_PERCENTAGE, MyDBManager.KEY_PRICE, 
      MyDBManager.KEY_VOLUME, MyDBManager.KEY_VFM, MyDBManager.KEY_QUANTITY }; 

    int[] to = new int[] { R.id.description,R.id.perc,R.id.price,R.id.units,R.id.vol, R.id.vfm }; 
    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, columns, to); 
    this.setListAdapter(mAdapter); 
    db.close(); 
} 
} 

row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<TextView 
    android:id="@+id/description" 
    android:layout_width="140dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="27dp" /> 

<TextView 
    android:id="@+id/vol" 
    android:layout_width="30dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/description" 
    android:layout_alignBottom="@+id/description" 
    android:layout_toRightOf="@+id/description" /> 

<TextView 
    android:id="@+id/perc" 
    android:layout_width="30dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/vol" 
    android:layout_alignBottom="@+id/vol" 
    android:layout_toRightOf="@+id/vol" /> 

<TextView 
    android:id="@+id/price" 
    android:layout_width="30dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/perc" 
    android:layout_alignBottom="@+id/perc" 
    android:layout_toRightOf="@+id/perc" /> 

<TextView 
    android:id="@+id/units" 
    android:layout_width="30dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/price" 
    android:layout_alignBottom="@+id/price" 
    android:layout_toRightOf="@+id/price" /> 

<TextView 
    android:id="@+id/vfm" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/units" 
    android:layout_alignBottom="@+id/units" 
    android:layout_toRightOf="@+id/units" /> 

</RelativeLayout> 

activity_display_cursor.xml는

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

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

<TextView android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/nodata"/> 

</LinearLayout> 
+2

Offtopic : 'LinearLayout'을 부모로 사용하여 콘텐츠 뷰를 설정하는 경우 왜'ListActivity'를 사용합니까? – tolgap

답변

4

아, CursorAdapter와 ListView에 다시 파업! 첫 번째 라운드를 groco하는 것은 쉽지 않습니다.

대부분의 경우 올바르지 만 row.xml에는 표시 할 커서의 각 열에 대한보기가 있어야합니다. CursorAdapter 생성자의 "layout"인수는 레이아웃 파일의 resID를 지정합니다. 이 파일은 한 행을 설명합니다. 귀하의 경우에는 아마도 6 개의 TextView가있는 RelativeLayout이 필요하며, 의 R.id 값 각각에 대해 하나씩 생성자에 대한 "to"인수가 필요합니다. CursorAdapter는 커서 열을 "to"인수의 뷰에 매핑하므로 이러한 배열의 크기가 동일해야합니다.

activity_display_cursor.xml 레이아웃은 ListView를 정의합니다.

참고로 ListActivity를 많이 사용하지 않습니다. 일반 Activity에서 어댑터로 ListView를 설정하기는 쉽습니다. 또한 startManagingCursor는 API 11에서 더 이상 사용되지 않습니다. 더 나은 선택은 android.support.v4.content.CursorLoader 및 android.support.v4.widget.SimpleCursorAdapter를 사용하는 것입니다.

+0

지금까지 모든 도움에 감사드립니다! 이제는 모든 것이 잘 컴파일됩니다. 하지만 내 커서의 모든 행에 대해 화면에 빈 행이 표시됩니다. 그 row.xml에 뭔가 빠져 있어야합니까? – Ron

+1

'int [] to '의 값은 row.xml의'TextViews'의 ID와 일치해야합니다. – tolgap

+0

완벽한, 고마워! – Ron