如何从Matrix中填充ListView光标
问题描述:
我已经做了MatrixCursor
来访问我的数据。它有4列。我有一个ListView
其中每行有3个元素(其中一个是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>
答
使用SimpleCursorAdapter
。 您需要一个带有要放入列表中的列的字符串数组,您的适配器将在其上绑定列中的数据的布局中带有TextView
的ID的int数组。另外为了使用游标与ListView
光标必须有一个添加到查询列_id
:
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;
然后在你的MatrixCursor
命名BaseColumns._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;
然后使用光标像上面(见小编辑)。
答
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);
}
}
感谢哥们,但正如你可以看到我的光标没有_id列。我如何解决这个问题? – 2012-02-24 18:08:58
@BinoyBabu我编辑了我的答案。 – Luksprog 2012-02-24 18:25:43