私はカーソルからのデータで、このようにリストを埋めたい:列名の代わりにフィールド値を取得する方法?
myCursor = myDBA.getAllCompanies();
startManagingCursor(myCursor);
myListAdapter = new SimpleCursorAdapter(this, R.layout.company_row, myCursor, FROM, TO);
myListAdapter.setViewBinder(VIEW_BINDER);
companiesListView.setAdapter(myListAdapter);
私は、各行に2 TextViews
と1 ImageView
を埋めるために、カスタムViewBinder
を使用します。
private final ViewBinder VIEW_BINDER = new ViewBinder() {
/**
* Binds the Cursor column defined by the specified index to the
* specified view.
*/
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch (viewId) {
case R.id.company_name:
case R.id.company_desc:
Log.d(TAG, "Binding TextView");
TextView venueText = (TextView) view;
venueText.setText(cursor.getString(columnIndex));
return true;
case R.id.company_icon:
Log.d(TAG, "Binding ImageView");
ImageView venueIcon = (ImageView) view;
String iconName;
iconName = cursor.getString(columnIndex); //Here I get the column name not the field value
Resources resources = myContext.getResources();
Drawable drawable = resources.getDrawable(resources
.getIdentifier("my.package:drawable/"
+ iconName, null, null));
venueIcon.setImageDrawable(drawable);
return true;
}
return false;
}
};
私の問題がありますcursor.getString()
メソッド呼び出しは、フィールドの値ではなく列名を返します。したがって、列名を持つ何百もの行が得られます。
更新:
マイgetAllCompanie
のCursor
にmoveToFirst
コールが含まれますが、まだ、私は列の名前を取得:
public Cursor getAllCompanies(){
Cursor s = myDB.query(TABLE, KEYS, WHERE, null, null, null, null);
s.moveToFirst();
return s;
}
からあなたの文字列を取得します: 'myDBA.getAllCompanies(中' moveToFirst')を呼び出し、 '、あなたは問題ないはずです。 – Femi
moveToFirstをどこから呼び出すのかは重要ではありません。 –
それは正しいですが、それは 'Cursor'を返す関数に埋め込むのが最も簡単です。 'Cursor'を返すと、準備が整いました。 'moveToFirst'が失敗した場合はnullを返し、運動全体をスキップします。 – Femi