2013-05-20 3 views
1

Я пишу приложение для Android, чтобы перечислить элемент из базы данных, и отметить некоторые из этих элементов в качестве избранного и сохранить обновление базы данных в соответствии с избранным.Проблема с изменением изображения в ListView

My Aim is:

Когда я отмечаю конкретный элемент ListView в качестве фаворита, образ этого конкретного элемента списка будет изменен и соответствующий столбец таблицы должен быть обновлен в фаворитах (да) или не любимый (нет) ,

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

My Problem is:

1.При нажатии изображение определенного элемента, то изображение будет изменено once, и соответствующая база данных также будет изменен. Но, Нажав на то же изображение another time (в последний раз, нажав на картинку) does not change anything (не меняйте изображение, а не обновляйте).

2. By scrolling the listView keep the listview as before changing the listView.

Я отношу this link, before I use database. Он работал нормально.

После я использую базу данных, я изменил код, как показано ниже:

public class EpisodeCursorAdapter extends SimpleCursorAdapter { 

    public final String TAG = "EpisodeCursorAdapter"; 
    //private String strurl = "http://timesofindia.feedsportal.com/c/33039/f/533916/index.rss"; 
    public int favourite[]; 
    private Cursor c,temp_cursor; 
    private Context context; 
    AABDatabaseManager db; 
    public EpisodeCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     this.c = c; 
     temp_cursor=c; 
     this.context = context; 
     Log.d(TAG, "Object size is:" +c.getCount()); 
//  favourite = new int[c.getCount()]; 
//  for (int i = 0; i < c.getCount(); i++) { 
//   favourite[i] = 0; 
//  } 
    } 

    static class EpisodeHolder { 
     TextView title; 
     TextView desc; 
     ImageView thumbnail, favourite; 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     Log.d(TAG,"NEw view in Cursor adapater"+" "+cursor.getCount()); 
     Cursor cc=getCursor(); 
     Log.d(TAG,"NEw view in Cursor adapater"+" "+cc.getCount()+ " "+cc.getInt(0)); 

     // TODO Auto-generated method stub 
     return super.newView(context, cursor, parent); 
    } 
    public View getView(final int pos, View inView, ViewGroup parent) { 


     Log.d(TAG,"getView view in Cursor adapater " + pos); 
     View v = inView; 
     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.episode_row_view, null); 
      final EpisodeHolder holder = new EpisodeHolder(); 
      db = new AABDatabaseManager(context); 
      holder.title = (TextView) v.findViewById(R.id.title); 
      holder.desc = (TextView) v.findViewById(R.id.description); 
      holder.favourite = (ImageView) v.findViewById(R.id.imageView1); 
      holder.thumbnail = (ImageView) v.findViewById(R.id.image); 
      v.setTag(holder); 
      Log.d(TAG, "Row tag is:" + v.getTag()); 
      holder.favourite.setTag(pos); 



      holder.favourite.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        int posi = (Integer) v.getTag(); 
        //Log.d(TAG, "Cursor total count" + c.getCount() + " position:" + holder.favourite.getTag() + " view position:" + pos + " " + posi); 
        Log.d(TAG,"****************************** INFO REGARDING CLICKING ON FAVOURITE ************************"); 
        Log.d(TAG,"Position of image clicked   : " + posi); 
        temp_cursor.moveToPosition(posi); 
        int id = temp_cursor.getInt(temp_cursor.getColumnIndex("_id")); 
        String markedAsFav = temp_cursor.getString(temp_cursor.getColumnIndex("favourite")); 
        Log.d(TAG, "Id of clicked item is : " + id + "    Favourite : " + markedAsFav); 

        if(markedAsFav.equalsIgnoreCase("no")) { 

         Log.d(TAG, "****In favourite onClick*** Was not as favourite... Mark as favourite..."); 
         holder.favourite.setImageResource(R.drawable.ic_favourite_2); 
         db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite"))); 
        } else if(markedAsFav.equalsIgnoreCase("yes")) { 
         Log.d(TAG, "****In favourite onClick*** Was as favourite... Mark it as not favourite..."); 
         holder.favourite.setImageResource(R.drawable.ic_favourite_1); 
         db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite"))); 
        } 
       } 
      }); 
     } else { 
      ((EpisodeHolder) v.getTag()).favourite.setTag(pos); 
     } 
     final EpisodeHolder holder = (EpisodeHolder) v.getTag(); 
     this.c.moveToPosition(pos); 
     String imageUrl = this.c.getString(this.c 
       .getColumnIndex("table_epi_image")); 
     String titleStr = this.c.getString(this.c 
       .getColumnIndex("table_epi_title")); 
     String descStr = this.c.getString(this.c 
       .getColumnIndex("table_epi_description")); 

     if(c.getString(c.getColumnIndex("favourite")).equalsIgnoreCase("yes")) 
       { 
      holder.favourite.setImageResource(R.drawable.ic_favourite_2); 
       } 
     else 
     { 
      holder.favourite.setImageResource(R.drawable.ic_favourite_1); 

     } 

     holder.thumbnail.setTag(imageUrl); 
     new DownloadImagesTask().execute(holder.thumbnail); 

     //TextView title = (TextView) v.findViewById(R.id.title); 
     holder.title.setText(titleStr); 

     //TextView desc = (TextView) v.findViewById(R.id.description); 
     holder.desc.setText(descStr); 
     return (v); 
    } 
} 

Я знаю, что я что-то отсутствует. Но я не мог понять, что это.

Пожалуйста, помогите мне решить эту проблему.

Спасибо вам заранее!

+0

здесь temporory coursor такое же, как и при он был передан конструктору, поэтому обновленная ссылка недоступна курсору, и она перейдет к значению no/yes, которое было ранее неактивным, вам придется обновить курсор новым значение –

+0

Спасибо. Как его решить? – Dhasneem

+0

просто загрузите курсор снова –

ответ

0

Как сказал Yume117, я вызвал метод notifyDataSetChanged(). Я обновил свой ответ, как показано ниже:

Я добавил эту строку refreshCursorAdapter(); рядом ниже кодов в onclick()

if(markedAsFav.equalsIgnoreCase("no")) { 

         Log.d(TAG, "****In favourite onClick*** Was not as favourite... Mark as favourite..."); 
         holder.favourite.setImageResource(R.drawable.ic_favourite_2); 
         db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite"))); 
        } else if(markedAsFav.equalsIgnoreCase("yes")) { 
         Log.d(TAG, "****In favourite onClick*** Was as favourite... Mark it as not favourite..."); 
         holder.favourite.setImageResource(R.drawable.ic_favourite_1); 
         db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite"))); 
        } 

refreshCursorAdapter является:

public void refreshCursorAdapter() { 
     // TODO Auto-generated method stub 

     Log.d(TAG,"Refresh adapter is called....***************"); 
     dbAdapter = new DBAdapter(); 
     Cursor cursor = null; 
     try { 
      EpisodeCursorAdapter adapter; 
      dbAdapter.open(); 
      cursor = dbAdapter.fetchLimitRowsFromEpisode(
        Common.currentListCountForEpi, EpisodeActivity.refId); 
      String[] columns = new String[] { DatabaseHelper.SUB_ID, 
        DatabaseHelper.EPI_FILEIMAGE_ID, 
        DatabaseHelper.EPI_TITLE, DatabaseHelper.EPI_DESC }; 

      // the XML defined views which the data will be bound to 
      int[] to = new int[] { R.id.title, R.id.description }; 
      adapter = new EpisodeCursorAdapter(
        EpisodeActivity.context, R.layout.episode_row_view, 
        cursor, columns, to, Common.REFRESH); 

      adapter.changeCursor(cursor); 
      adapter.notifyDataSetChanged(); 

      dbAdapter.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
Смежные вопросы