Android 如何根据数据库填充数据将图像源设置为listView
基本上,我要做的是根据从预创建的数据库中获取的id,动态地将图像源设置为图像视图。这是我的列表片段:Android 如何根据数据库填充数据将图像源设置为listView,android,database,android-listview,imageview,android-viewbinder,Android,Database,Android Listview,Imageview,Android Viewbinder,基本上,我要做的是根据从预创建的数据库中获取的id,动态地将图像源设置为图像视图。这是我的列表片段: public class teamsListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { String[] teams; private SimpleCursorAdapter adapter; @Override public vo
public class teamsListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
String[] teams;
private SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] projection = {DBAdapter.KEY_ROWID, DBAdapter.KEY_NAME};
String[] uiBindFrom = {DBAdapter.KEY_NAME};
int[] uiBindTo = {R.id.label};
getLoaderManager().initLoader(0, null, this);
adapter = new SimpleCursorAdapter(
getActivity().getApplicationContext(), R.layout.team_row,
null, uiBindFrom, uiBindTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
adapter.setViewBinder(VIEW_BINDER);
setListAdapter(adapter);
}
static final SimpleCursorAdapter.ViewBinder VIEW_BINDER = new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if(view.getId() != R.id.icon) return false;
ImageView teamIcon = (ImageView) view;
int idTeam = cursor.getInt(cursor.getColumnIndex(DBAdapter.KEY_ROWID));
switch(idTeam) {
case 1:
teamIcon.setImageResource(R.drawable.team1);
break;
case 2:
teamIcon.setImageResource(R.drawable.team2);
break;
}
return true;
}
};
}
公共类teamsListFragment扩展ListFragment实现LoaderManager.LoaderCallbacks{
字符串[]团队;
专用SimpleCursorAdapter适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[]projection={DBAdapter.KEY_ROWID,DBAdapter.KEY_NAME};
字符串[]uiBindFrom={DBAdapter.KEY_NAME};
int[]uiBindTo={R.id.label};
getLoaderManager().initLoader(0,null,this);
适配器=新的SimpleCursorAdapter(
getActivity().getApplicationContext(),R.layout.team_行,
null、uiBindFrom、uiBindTo、CursorAdapter.FLAG\u REGISTER\u CONTENT\u OBSERVER);
adapter.setViewBinder(视图绑定器);
setListAdapter(适配器);
}
静态最终SimpleCorsorAdapter.ViewBinder视图_BINDER=新SimpleCorsorAdapter.ViewBinder(){
@凌驾
公共布尔setViewValue(视图、光标、int-columnIndex){
if(view.getId()!=R.id.icon)返回false;
ImageView团队图标=(ImageView)视图;
intidteam=cursor.getInt(cursor.getColumnIndex(DBAdapter.KEY_ROWID));
交换机(idTeam){
案例1:
teamIcon.setImageResource(R.drawable.team1);
打破
案例2:
teamIcon.setImageResource(R.drawable.team2);
打破
}
返回true;
}
};
}
这是我的teamrow.xml
<ImageView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
/>
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:lines="1"
android:text="@+id/TextView01"
android:textSize="24dp" />
问题是,如果未设置图像源,则无法工作。我认为是视图绑定器,但我是android新手,我非常感谢您能告诉我我的错误,或者有更好的方法来实现这一点。提前谢谢。为什么你要用
静态最终版
来声明你的活页夹?@Merlin我这样做是因为我遵循本教程,他们是这样做的。我在另一本书中注意到了这一点。。。我对技术原因很好奇。。。我可能需要重新审视Android的优化。