2015-12-26 41 views
5

Mam listview, który ma ulubiony przycisk dla każdego elementu listy, który po kliknięciu powinien dodać element listy do innej czynności o nazwie moje fav9rites. Używam Baseadapter dla listview i Sharedpreference do dodawania ulubionych. Po kliknięciu przycisku ulubione, element widoku listy jest dodawany w mojej aktywności ulubionych, ale mam do czynienia z następującymi problemami:Dodawanie przycisku ulubionych w widoku listy

1) przycisk ulubionych po kliknięciu powinien zostać ciemny, co wskazuje, że element listy został dodany do ulubione. Zdarza się to, ale gdy zamykam działanie i wracam, przycisk cofa się zamiast ciemnieć

2) po długim naciśnięciu na pozycji listy w mojej ulubionej działalności, element listy powinien zostać usunięty z ulubionych, ale nie jest to wydarzenie.

nadzieję, że wszyscy rozumieją moje pytanie

Mój kod

mój adapter baza

public View getView(final int position, View view, ViewGroup parent) 
{ 
    final ViewHolder holder; 
    if(view == null){ 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.beg_list_item,null); 
     holder.listHeading = (TextView) view.findViewById(R.id.beg_list_itemTextView); 
    // holder.listHash = (TextView) view.findViewById(R.id.listview_hashtags); 
     holder.alphabetList = (ImageView) view.findViewById(R.id.beg_list_itemImageView); 
     holder.favoriteImg = (ImageView) view.findViewById(R.id.favbtn); 
     view.setTag(holder); 

    }else{ 
     holder = (ViewHolder) view.getTag(); 
     } 
     CodeList code = (CodeList) getItem(position); 
     holder.listHeading.setText(codeList.get(position).getListHeading()); 
     imageLoader.DisplayImage(codeList.get(position).getAlphabetimg(), 
           holder.alphabetList); 
    // holder.listHash.setText(codeList.get(position).getListHashTags());      

    if (checkFavoriteItem(code)) { 
     holder.favoriteImg.setImageResource(R.drawable.favorite); 
     holder.favoriteImg.setTag("yes"); 
    } else { 
     holder.favoriteImg.setImageResource(R.drawable.unfavorite); 
     holder.favoriteImg.setTag("no"); 
    } 

      view.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View arg0){ 
        Intent intent = new Intent(context, SingleItemView.class); 

        //intent.putExtra("listheading", 
        //  (codeList.get(position).getListHeading())); 
        //intent.putExtra("alphabetimg", 
        //    (codeList.get(position).getAlphabetimg())); 

        intent.putExtra("demovideo", 
            (codeList.get(position).getDailogdemovideo())); 

        intent.putExtra("download", 
            (codeList.get(position).getDownloadCode())); 

        // Start SingleItemView Class 
        context.startActivity(intent); 

       } 
      }); 



      final ImageView favoritesbutton = (ImageView) view.findViewById(R.id.favbtn); 

      favoritesbutton.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v){ 
        String tag = favoritesbutton.getTag().toString(); 

        if(tag.equalsIgnoreCase("no")){ 
         shrdPrefence.addFavorite(context, codeList.get(position)); 

         Toast.makeText(context, R.string.fav_added, Toast.LENGTH_SHORT).show(); 

         favoritesbutton.setTag("yes"); 
         favoritesbutton.setImageResource(R.drawable.favorite); 
        }else{ 
         shrdPrefence.removeFavorite(context, codeList.get(position)); 
         favoritesbutton.setTag("no"); 
         favoritesbutton.setImageResource(R.drawable.unfavorite); 
         Toast.makeText(context, R.string.fav_removed, Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 


    return view; 
} 

//Checks whether a particular product exists in SharedPreferences*/ 
public boolean checkFavoriteItem(CodeList checkCode) { 
    boolean check = false; 
    List<CodeList> favorites = shrdPrefence.getFavorites(context); 
    if (favorites != null) { 
     for (CodeList code : favorites) { 
      if (code.equals(checkCode)) { 
       check = true; 
       break; 
      } 
     } 
    } 
    return check; 
} 


public void add(CodeList code) { 

    codeList.add(code); 
    notifyDataSetChanged(); 
} 


public void remove(CodeList code) { 

    codeList.remove(code); 
    notifyDataSetChanged(); 
} 

sharedpreference.java

public class SharedPreference 
{ 

public static final String PREFS_NAME = "MY_APP"; 
public static final String FAVORITES = "code_Favorite"; 

public SharedPreference(){ 
    super(); 
} 

public void saveFavorites(Context context, List<CodeList> favorites){ 
    SharedPreferences settings; 
    Editor editor; 

    settings = context.getSharedPreferences(PREFS_NAME, 
              Context.MODE_PRIVATE); 
    editor = settings.edit(); 

    Gson gson = new Gson(); 
    String jsonFavorites = gson.toJson(favorites); 

    editor.putString(FAVORITES, jsonFavorites); 

    editor.commit(); 
} 

public void addFavorite(Context context, CodeList code){ 
    List<CodeList> favorites = getFavorites(context); 

    if(favorites == null) 
     favorites = new ArrayList<CodeList>(); 
     favorites.add(code); 
     saveFavorites(context,favorites); 
} 

public void removeFavorite(Context context, CodeList code) { 
    ArrayList<CodeList> favorites = getFavorites(context); 
    if (favorites != null) { 
     favorites.remove(code); 
     saveFavorites(context, favorites); 
     } 
    } 


public ArrayList<CodeList> getFavorites(Context context) { 
    SharedPreferences settings; 
    List<CodeList> favorites; 

    settings = context.getSharedPreferences(PREFS_NAME, 
              Context.MODE_PRIVATE); 

    if (settings.contains(FAVORITES)) { 
     String jsonFavorites = settings.getString(FAVORITES, null); 
     Gson gson = new Gson(); 
     CodeList[] favoriteItems = gson.fromJson(jsonFavorites, 
               CodeList[].class); 

     favorites = Arrays.asList(favoriteItems); 
     favorites = new ArrayList<CodeList>(favorites); 
    } else 
     return null; 

    return (ArrayList<CodeList>) favorites; 
} 

} 

mój favorite..java

public class MyFavActivity extends Activity 
    { 
    SharedPreference shrdPrfence; 
    List<CodeList> favorites; 

    FinalAdapter fnlAdpter; 
    Context context = this.context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fav_layout); 

     shrdPrfence = new SharedPreference(); 
     favorites = shrdPrfence.getFavorites(MyFavActivity.this); 

     if(favorites == null){ 
      Dialog dialog = new Dialog(MyFavActivity.this); 
      dialog.setTitle(R.string.nofav_title); 
      dialog.show(); 
     }else{ 
      if(favorites.size() == 0){ 
       Dialog dialog = new Dialog(MyFavActivity.this); 
       dialog.setTitle(R.string.nofav_title); 
       dialog.show(); 
      } 

      ListView favList = (ListView) findViewById(R.id.fav_layoutListView); 

      if(favorites != null){ 
       fnlAdpter = new FinalAdapter(MyFavActivity.this, favorites); 
       favList.setAdapter(fnlAdpter); 

       favList.setOnItemClickListener(new OnItemClickListener() { 

         public void onItemClick(AdapterView<?> parent, View arg1, 
               int position, long arg3) { 

         } 
        }); 





       favList.setOnItemLongClickListener(new OnItemLongClickListener() { 

         @Override 
         public boolean onItemLongClick(AdapterView<?> parent, View view, 
          int position, long id) { 

          ImageView button = (ImageView) view 
           .findViewById(R.id.favbtn); 

          String tag = button.getTag().toString(); 
          if (tag.equalsIgnoreCase("no")) { 
           shrdPrfence.addFavorite(MyFavActivity.this, 
                  favorites.get(position)); 
           Toast.makeText(
            MyFavActivity.this, 
             R.string.fav_added, 
            Toast.LENGTH_SHORT).show(); 

           button.setTag("yes"); 
           button.setImageResource(R.drawable.favorite); 
          } else { 
           shrdPrfence.removeFavorite(MyFavActivity.this, 
                   favorites.get(position)); 
           button.setTag("no"); 
           button.setImageResource(R.drawable.unfavorite); 
           fnlAdpter.remove(favorites.get(position)); 
           Toast.makeText(
            MyFavActivity.this, 
             R.string.fav_removed, 
            Toast.LENGTH_SHORT).show(); 
          } 
          return true; 
         } 
        }); 
      } 
     } 
     } 

    } 
+0

Czy sprawdziłeś, czy działa 'code.equals (checkCode)'? Czy zaimplementowałeś dla niego metodę ".equals"? – Roshan

+0

@Roshan Tak sprawdziłem. Działa – user5524159

Odpowiedz

2

Właściwie twoje saveFavorites() metoda działa dobrze, po prostu zadzwoń becuse gson.toJson() (konwersja wszystko w formacie JSON)

Chcesz zapisuj dane za pomocą SharedPreferences i użyłeś tej linii do odzyskania swoich danych, aby nigdy nie otrzymywać zapisanych danych Ta linia, ponieważ można zaoszczędzić listy i chcesz, aby pobrać tablica(!)

Jeśli zapisałeś listę trzeba sprowadzaniu swoich danych z listy tokena. I potrzebujesz tej linii:

gson.fromJson(jsonFavorites,new TypeToken<ArrayList<CodeList>>() {}.getType()); 

Myślę, że rozwiąże to twoje pytanie. Powodzenia.

+0

Dzięki za pomoc. Próbowałem, jak powiedziałeś, ale kiedy otwieram swoją ulubioną aktywność, aplikacja się zawiesza i otrzymuję to w logcat. Nie można rozpocząć działania ComponentInfo {com.enlightenme.pac/com.enlightenme.pac.MyFavActivity}: java.lang.ClassCastException: java.util.ArrayList nie można przesłać do com.enlightenme.pac.CodeList [] – user5524159