Галерея, sqlite android? - PullRequest
       7

Галерея, sqlite android?

0 голосов
/ 08 декабря 2011

Я застрял в какой-то точке и не могу найти решение.

Описание: у меня есть база данных sqlite с таблицей (таблицей каналов), которая имеет 4 столбца

 uid      channel_name     cid(country id)      rating

uid - уникальный идентификатор канала.

У меня есть три изображения с рейтингом звезды, если звезда желтая, то канал имеет рейтинг 4 или 5. если звезда наполовину желтая, то рейтинг канала равен 2 или 3. Если звезда белая, то учитывается рейтинг 1.

Я показываю эти три изображения из виджетов галереи в Android. и название канала под звездными изображениями. согласно рейтингу канала.

 public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
            View view = null;
            Cursor mCursor=db.dataChannelsName();
            mCursor.moveToFirst();
            String [] channels_name = new String[mCursor.getCount()];
            for(int icount=0; icount<mCursor.getCount();icount++) { 
                channels_name[icount] =  mCursor.getString(mCursor.getColumnIndex("name"));
                mCursor.moveToNext();
            }

            if(paramView == null) {
                    LayoutInflater inflater = LayoutInflater.from(mContext);
                    view = inflater.inflate(R.layout.items1, null);
                    ImageView image1 = (ImageView) view.findViewById(R.id.image1);
                    TextView description = (TextView) view.findViewById(R.id.description);

                    image1.setImageResource(mImageIds[paramInt]);
                    description.setTextColor(0xffffffff);
                    description.setText(channels_name[paramInt]);
            } else {
                    view = paramView;
            }

            return view;

Вопрос 1:

Как я покажу только эти три изображения для всех каналов с разными названиями каналов .?

Вопрос 2:

Может быть возможно иметь канал с тем же именем в базе данных

Я использую sql запросы и курсор для извлечения данных.

Теперь моя проблема в том, что когда пользователь выберет конкретный канал из галереи, существует вероятность, что может быть более одного канала с одинаковым именем.

Я просто хочу сохранить uid, когда пользователь нажимает на название канала из галереи ??

РЕДАКТИРОВАТЬ Я только что решил второй вопрос, но я застрял в вопросе 1

любая помощь будет оценена.

1 Ответ

1 голос
/ 09 декабря 2011

Давайте начнем исправлять некоторые вещи, не так ли?

public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
   View view = null;
   Cursor mCursor=db.dataChannelsName();
   mCursor.moveToFirst();
   String [] channels_name = new String[mCursor.getCount()];
   for(int icount=0; icount<mCursor.getCount();icount++) { 
       channels_name[icount] =  mCursor.getString(mCursor.getColumnIndex("name"));
       mCursor.moveToNext();
   }

Теперь функция getView вызывается каждый раз, когда listView отображает новую строку (даже при прокрутке !!) ... Я предполагаю, что db.dataChannelName() запускает запрос SELECT * from channel (или хуже, вы можете открывать и закрывать база данных) .... Это очень дорогая операция, вы должны запросить ее один раз в конструкторе, сохранить массив имен каналов как переменную-член и использовать его для остальной части адаптера.

Вот краткий способ ..

public View getView(int paramInt, View view, ViewGroup paramViewGroup) {
    if(view== null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        view = inflater.inflate(R.layout.items1, null);
        } 

        ImageView image1 = (ImageView) view.findViewById(R.id.image1);
        TextView description = (TextView) view.findViewById(R.id.description);

        image1.setImageResource(mImageIds[paramInt]); // i'm assuming 0 - 0 star, 1 - 1 star, etc...
        description.setTextColor(0xffffffff);
        description.setText(channels_name[paramInt]); //remember channel_name was obtained in the constructor.


return view
}
...