我正在尝试使用带有textview和图片视图的行自定义Android中的列表。
有: 我可以直接从数据库中获取三个textview(TextViewPurpose,TextViewStart,TextViewInfo)(目的,开始,信息)
另外两个textview(TextViewCO2,TextViewCalory)我需要根据数据库中的值来计算(我想根据距离计算CO2和Calory,这也是在数据库中)
基于两个值的图像视图(ImageTripPurpose)(如果没有上传,我使用图像。如果上传,图像将基于目的)。
现有代码只为该行添加了三个textview。
Cursor allTrips = mDb.fetchAllTrips();
SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(),
R.layout.saved_trips_list_item, allTrips, new String[] {
"purp", "start", "info" }, new int[] {
R.id.TextViewPurpose, R.id.TextViewStart, R.id.TextInfo });
lv.setAdapter(sca);
当我只是想在每一行上放一个图像时,我使用了它,但它不起作用。
sca.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
/** Binds the Cursor column defined by the specified index to the specified view */
public boolean setViewValue(View view, Cursor cursor, int columnIndex){
if(view.getId() == R.id.icon){
((ImageView)view).setImageResource(R.drawable.commute);
return true; //true because the data was bound to the view
}
return false;
}
});
此外,据说由于加载数据的延迟,不鼓励使用SimpleCursor Adapter。建议使用LoaderManager和CursorLoader。我该怎么做才能解决这些问题?
答案 0 :(得分:1)
以下是一个如何完成的示例。对不起有些错误,它是从ipad打字的..只是为了给你一个主意。
class MyFragment extends ListFragment {
private CursorAdapter mAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = new String[] { "purp", "start", "info" };
int[] to = new int[] {R.id.TextViewPurpose, R.id.TextViewStart, R.id.TextInfo };
mAdapter = MyCursorAdapter(getActivity(),
R.layout.saved_trips_list_item, allTrips,
null,
from ,
to,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERV);
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
new AsyncTask<Void, Void, Cursor>() {
protected Long doInBackground(Void... voids) {
return mDb.fetchAllTrips();
}
protected void onPostExecute(Cursor result) {
mAdapter.changeCursor(result);
}
}.execute();
}
public static class MyCursorAdapter extends SimpleCursorAdapter {
MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags)
}
public bindView(View view, Context context, Cursor cursor) {
ImageView imageView = (ImageView) view.findById(R.id.imageView);
imageView.setImageResource(R.drawable.commute);
}
}
}