打开数据库连接定制适配器

时间:2011-07-07 07:00:34

标签: android database adapter

我对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*/

            }

        }
    };

2 个答案:

答案 0 :(得分:0)

可能您有充分的理由使用imgFavourite.setOnClickListener(favPicture);,但这不是通常的方式来听取适配器中的点击次数

通常的方式是在您的活动中致电lv.setOnItemClickListener(new OnItemClickListener() {...});,其中lv是您的列表视图。将“...”替换为onItemClick()的主体,该主体将包含与onClick(View v)基本相同的内容。您将获得位置作为参数,因此您无需使用setTag() / getTag()

您是否将数据库功能从适配器中移出,这在大多数情况下是正确的。

答案 1 :(得分:0)

但是不是让适配器让它们管理数据库的想法吗?我的意思是你扩展newVIew和bindView,在这些方法中你有光标指向db中的某些记录,你只是更新了一些列表定制方式。 。

所以我的问题是没有管理数据库插入(在适配器中)不良做法?