我对Android适配器有疑问。
我有一个类,扩展了BaseAdapter。这基本上是我的适配器。我在此适配器中打开数据库连接,并在用户单击按钮时写入数据库。
在适配器类中打开数据库连接是不好的做法吗?如果是这样我怎么克服这个?
我没有使用数据库进行查询,我只是在用户点击按钮时使用它来插入值。
这是一段代码片段。为简洁起见,我删除了大部分代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String genre = "";
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.featured_tab_sublayout, null);
}
ImageView imgFavourite = (ImageView) convertView.findViewById(R.id.imgFavourite);
imgFavourite.setOnClickListener(favPicture);
imgFavourite.setTag(position);
return convertView;
}
OnClickListener favPicture = new OnClickListener() {
@Override
public void onClick(View v) {
int i = (Integer) v.getTag();
Radio rad = radios.get(i);
if(db.Exists(rad.getmStreamLink())){
showConfirmation(i,rad);
}else{
String genre = "";
if(rad.getGenre().size()>0){
for(String g: rad.getGenre()) {
genre += g + ",";
}
}
db.insertOrder(rad.getmName(), rad.getmDesc(), rad.getmLogo(),
genre, rad.getmCountry(), rad.getmCity(), rad
.getmStreamLink(), rad.getmTwitter(), rad
.getmFacebook(), rad.getmWebsite(), rad
.getmRadionomyID(), rad.getmAudienceRank());
ErrorDialog.show(context, resource.getString(R.string.alert_dialog_fav_added));
/*String name, String desc, String logo,
String genre, String country, String city, String stream_link,
String twitter, String facebook, String website, String radionomy,
String audience_rank*/
}
}
};
答案 0 :(得分:0)
可能您有充分的理由使用imgFavourite.setOnClickListener(favPicture);
,但这不是通常的方式来听取适配器中的点击次数。
通常的方式是在您的活动中致电lv.setOnItemClickListener(new OnItemClickListener() {...});
,其中lv
是您的列表视图。将“...”替换为onItemClick()的主体,该主体将包含与onClick(View v)
基本相同的内容。您将获得位置作为参数,因此您无需使用setTag()
/ getTag()
。
您是否将数据库功能从适配器中移出,这在大多数情况下是正确的。
答案 1 :(得分:0)
但是不是让适配器让它们管理数据库的想法吗?我的意思是你扩展newVIew和bindView,在这些方法中你有光标指向db中的某些记录,你只是更新了一些列表定制方式。 。
所以我的问题是没有管理数据库插入(在适配器中)不良做法?