2015-12-26 30 views
5

Ho un listview che ha un pulsante preferito per ogni elemento della lista che, quando si fa clic, dovrebbe aggiungere l'elemento della lista ad un'altra attività chiamata my fav9rites. Sto usando un Baseadapter per il listview e Sharedpreference per l'aggiunta di preferiti. Quando faccio clic sul pulsante preferito, l'elemento della visualizzazione elenco viene aggiunto all'attività Preferiti ma sto affrontando i seguenti problemi:Aggiunta del pulsante Preferiti nella vista elenco

1) il pulsante preferito quando viene premuto dovrebbe diventare scuro indicando che l'elemento dell'elenco è stato aggiunto a preferiti. Questo succede ma quando chiudo l'attività e torno di nuovo il pulsante torna indietro invece di essere scuro

2) alla pressione prolungata sulla voce di elenco nella mia attività preferita, l'elemento della lista deve essere rimosso dai preferiti ma questo non è accadendo.

Speranza capire a tutti la mia domanda

Il mio codice

il mio adattatore di base

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; 
} 

} 

mia 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

Avete controllato se 'code.equals (checkCode)' funziona? Hai implementato il metodo '.equals' per questo? – Roshan

+0

@Roshan Sì lo ha controllato. Funziona – user5524159

risposta

2

In realtà i tuoi saveFavorites() metodo funziona bene, becuse basta chiamare gson.toJson() (convertire tutto in formato JSON)

Volete ottenere i dati salvati con SharedPreferences e di aver usato questa linea di recuperare i dati

gson.fromJson(jsonFavorites, CodeList[].class); 

si mai ottenere i dati salvati con questa linea, perché risparmiare un lista e si desidera recuperare un serie(!)

Se è stato salvato un elenco è necessario retrive i dati con un token lista. E ti serve questa linea

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

Penso che questo risolva la tua domanda. In bocca al lupo.

+0

Grazie per l'aiuto. Ho provato come hai detto, ma quando apro la mia attività preferita l'app si arresta in modo anomalo e viene visualizzato in logcat. Impossibile avviare l'attività ComponentInfo {com.enlightenme.pac/com.enlightenme.pac.MyFavActivity}: java.lang.ClassCastException: java.util.ArrayList non può essere lanciato su com.enlightenme.pac.CodeList [] – user5524159