открытие адаптера подключения к базе данных - PullRequest
1 голос
/ 07 июля 2011

У меня вопрос по поводу адаптеров для 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 голосов
/ 07 июля 2011

Но разве идея адаптеров не позволяет им управлять базой данных? Я имею в виду, что вы расширяете newVIew и bindView, и в этих методах вы получаете курсор, указывающий на некоторую запись в db, и вы просто обновляете список в некоторыхнестандартный способ.,.

, поэтому мой вопрос заключается в том, не является ли управление данными для вставки (в адаптере) плохой практикой?

0 голосов
/ 07 июля 2011

Возможно, у вас есть веские основания для использования imgFavourite.setOnClickListener(favPicture);, но это не обычный способ прослушивания щелчков в адаптере .

В вашей деятельности обычно используется вызов lv.setOnItemClickListener(new OnItemClickListener() {...});, где lv - это ваш список.Замените "..." телом onItemClick (), которое будет по существу таким же, как ваш onClick(View v).Вы получите позицию в качестве параметра, поэтому вам не нужно будет использовать setTag() / getTag().

То, что вы перемещаете свою функциональность БД из адаптера, что является правильным способом сделать это в большинстве случаев.

...