【发布时间】:2016-01-03 23:13:05
【问题描述】:
它有一个标题,图片,评分(评分栏),评分计数(文本视图),最喜欢的指示器(图像),最喜欢的计数(文本视图),喜欢指示器,喜欢计数(文本视图),尝试指示器(图像) 并尝试计数(文本视图)。
它通过这个自定义光标适配器从 sqlite db 获取所有这些数据:
public class RecListCursorAdapter extends CursorAdapter {
public RecListCursorAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context)
.inflate(R.layout.list_item, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView thumbImg = (ImageView) view.findViewById(R.id.avatar);
ImageView favImg = (ImageView) view.findViewById(R.id.imageFav);
ImageView likeImg = (ImageView) view.findViewById(R.id.imageLike);
ImageView triedImg = (ImageView) view.findViewById(R.id.imageTried);
thumbImg.setImageResource(cursor.getInt(cursor.getColumnIndex(DBHelper.REC_THUMB_ID)));
if (cursor.getInt(cursor.getColumnIndex(DBHelper.REC_FAV)) == 1) {
favImg.setImageResource(R.drawable.heart_on);
}
if (cursor.getInt(cursor.getColumnIndex(DBHelper.REC_LIKED)) == 1) {
likeImg.setImageResource(R.drawable.thumb_on);
}
if (cursor.getInt(cursor.getColumnIndex(DBHelper.REC_TRIED)) == 1) {
triedImg.setImageResource(R.drawable.tried_on);
}
TextView title = (TextView) view.findViewById(R.id.text_title);
TextView favCnt = (TextView) view.findViewById(R.id.txtFavCnt);
TextView likeCnt = (TextView) view.findViewById(R.id.txtLikeCnt);
TextView triedCnt = (TextView) view.findViewById(R.id.txtTriedCnt);
title.setText(cursor.getString(cursor.getColumnIndex(DBHelper.REC_NAME)));
favCnt.setText(cursor.getString(cursor.getColumnIndex(DBHelper.REC_FAV_CNT)));
likeCnt.setText(cursor.getString(cursor.getColumnIndex(DBHelper.REC_LIKE_CNT)));
triedCnt.setText(cursor.getString(cursor.getColumnIndex(DBHelper.REC_TRIED_CNT)));
RatingBar rating = (RatingBar) view.findViewById(R.id.list_ratingbar);
rating.setRating(cursor.getFloat(cursor.getColumnIndex(DBHelper.REC_RATING)));
}
}
现在我正在将行 ID 发送到一个详细活动,该活动查询数据库以再次获取相同的数据,这意味着我两次查询数据库以获得相同的数据
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getActivity(), RecipeDetailActivity.class);
intent.putExtra(RecipeDetailActivity.EXTRA_POSITION, String.valueOf(id));
getActivity().startActivity(intent);
}
});
我想要做的是将数据从列表项发送到详细信息活动以显示以保存第二个查询
我认为我可以参考这些视图并从中获取值,但由于图像视图、文本视图和评分栏,这将是一个非常复杂的过程。
当然有一种更简单、更智能的方法可以做到这一点,但我想不通。
我做了很多搜索但没有运气。
你能指导我在这里做什么吗?
【问题讨论】:
-
聪明的方法是将 Sqllite 代码拆分为一个类来执行不同的功能,这样您就可以从任何活动中访问它们而无需重复代码 --hmkcode.com/android-simple-sqlite-database-tutorial
-
从光标创建一个 ArrayList
,其中 Model 实例将数据存储在 SQLite 的单行中并在适配器中使用该 ArrayList? -
@Tasos 我已经这样做了,这不是我不想重复的代码,它再次查询数据库以获得相同的数据。
-
你可以把这个Model做成parcelable,直接发送到下一个activity,这显然比对你要发送的每一个数据都调用putExtra要好
-
@Sourabh 我没看清楚,你能不能给个代码 sn-p 来澄清一下?