2012-02-24 13 views
2

私のデータにアクセスするためにMatrixCursorを作成しました。 4列あります。そして、私はListViewを持っています。各行には3つの要素があります(そのうちの1つはImageViewです。実際は2列しか必要ありません)。これはカーソルで初めてのことですので、どのアダプタがこれを行うのに最適ですか?これはこれまでの私の仕事です。MatrixカーソルからListViewを取り込む方法

MatrixCursor:

static MatrixCursor getnameList() { 
    ArrayList<String> fsitem = getfsiList(); 
    String[] columnNames = {"id", "name", "info","icon"}; 
    MatrixCursor cursor = new MatrixCursor(columnNames); 
    for (int i = 0; i < fsitem.size(); i++) { 
     try { 
      File root = new File(Environment.getExternalStorageDirectory() 
        .getName() + "/" + fsitem.get(i)); 
      if (root.canRead()) { 
       File namefile = new File(root, ".name"); 
       FileReader namereader = new FileReader(namefile); 
       BufferedReader in = new BufferedReader(namereader); 
       String id = in.readLine(); 
       String name = in.readLine(); 
       String info = in.readLine(); 
       String[] fsii = new String[4]; 
       fsii[0]= id; 
       fsii[1]= name; 
       fsii[2]= info; 
       fsii[3]= null; 
       cursor.addRow(fsii); 
      } 

     } catch (IOException e) { 
      Log.e("NameManager.java : ", ("Error!! Not Writable!!" 
        + Environment.getExternalStorageDirectory().getName() 
        + "/" + fsitem.get(i))); 
     } 
    } 
    Log.d("NameManager.getnameList()",cursor.toString()); 
    return cursor; 

} 

row.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="8dp" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="22dp" 
     android:layout_height="22dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="4dp" 
     android:src="@drawable/list_icon" > 
    </ImageView> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="16dp" 
     android:layout_marginLeft="38dp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/Info" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@id/info" 
     android:textSize="16dp" 
     android:textStyle="bold" /> 
</RelativeLayout> 

答えて

5

SimpleCursorAdapterを使用してください。 リストに入れたい列を持つString配列、アダプタが列からデータをバインドするレイアウトのTextViewのIDを持つint配列が必要です。また、カーソルは、クエリに追加する列_idを持っている必要がありますListViewでカーソルを使用するために:

String[] from = {BaseColumns._ID, "col1", "col2"}; 
int[] to = {R.id.Text1, R.id.text2} 
SimpleCursorAdapter adap = new SimpleCursorAdapter(this, R.layout.the_row_layout, curosrObject, from, to); 

編集:MatrixCursorあなたがフィールドを作ることができるで_id列を実装するにはあなたがカーソルを作成し、クラス:

private static int key = 0; 

は、その後、あなたのMatrixCursorBaseColumns._IDという名前で別の列を追加します。あなたはMatrixCursorに新しい行が追加されます場合は、次のように、代わりにString配列の新しいObject配列を追加します。

Object[] fsii = new Object[4]; 
fsii[0]= key; 
fsii[1]= name; 
fsii[2]= id; 
fsii[3]= info; 
cursor.addRow(fsii); 
key++; // the _id must have unique values so increment the key value; 

その後(小さな編集を参照)上記のようなカーソルを使用。

+0

ありがとうございました。でも、私のCursorには_id列がありません。どうすれば修正できますか? –

+0

@BinoyBabu私は自分の答えを編集しました。 – Luksprog

0
public class matrixCursor extends ListActivity { 

    private static int key = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     fillData(); 
    } 

    private void fillData() { 
     MatrixCursor matrixCursor = new MatrixCursor(new String[] { "_id","colName1","colName2" }); 
     String name="sethu"; 
     int id=1; 
     String info="something"; 
     for (int i = 0; i < 4; i++){ 
      matrixCursor.addRow(new Object[] { key,name, info}); 
      key++; 
     } 

     String[] columnNames = {"_id","colName1","colName2" }; 
     int[] to = {R.id.Text1, R.id.Text2, R.id.Text3}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.the_row_layout, 
       matrixCursor, columnNames, to); 
     setListAdapter(adapter); 
    } 
} 
関連する問題