Agregar el botón favorito en la vista de lista
Tengo un listview
que tiene un botón preferido para cada artículo de la lista que cuando chascado debe agregar el artículo de la lista a otra actividad llamada mis fav9rites. Estoy utilizando un Baseadapter
para el listview
y Sharedpreference
para agregar favoritos. Cuando hago clic en el botón favorito, el elemento de vista de lista se agrega en la actividad de mis favoritos pero me enfrento a los siguientes problemas:
1) el botón favorito cuando se hace clic se oscurece, lo que indica que el elemento de la lista se agrega a los favoritos. Esto sucede pero cuando cierro la actividad y vuelvo el botón vuelve atrás en vez de ser oscuro
- En preferencias compartidas, cómo almacenar array de cadena en la aplicación android
- Android SharedPreferences Conjunto de cadenas: algunos elementos se quitan después de reiniciar la aplicación
- ¿Cómo usar SharedPreferences como LocalStore, de manera más genérica?
- Poner y obtener la matriz de cadenas de las preferencias compartidas
- ¿Cómo puedo compartir un archivo SharedPreferences a través de dos aplicaciones de Android diferentes?
2) en la prensa larga en el artículo de la lista en mi actividad de los favoritos, el artículo de la lista se quitará de los favoritos pero esto no está sucediendo.
Espero que todos comprendan mi pregunta
Mi código
Mi adaptador 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; } }
Mi favorito .. 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; } }); } } } }
- Android Almacenamiento interno VS Preferencias compartidas
- SharedPreference cometido en SyncAdapter no actualizado en Activity?
- ¿Puede alguien explicar cómo SharedPreferences almacena un conjunto de cadenas
- Android Menu sólo funciona una vez por ejecución de aplicación
- Puedo almacenar dos o más valores con la misma clave usando SharedPreferences en android?
- Cómo analizar JSON analizado para uso sin conexión
- Escritura de clase Singleton para administrar las compartidas SharedPreferences de Android
- Android Studio - Explorador de archivos de Android Device Monitor no funciona
En realidad, su método saveFavorites () funciona bien, porque sólo tiene que llamar a gson.toJson () (convertir todo en formato json)
Desea obtener datos guardados con SharedPreferences y ha utilizado esta línea para recuperar sus datos
gson.fromJson(jsonFavorites, CodeList[].class);
Nunca obtienes los datos guardados con esta línea, porque guardas una lista y quieres recuperar una matriz (!)
Si ha guardado una lista, debe recuperar sus datos con un token de lista. Y necesitas esta línea
gson.fromJson(jsonFavorites,new TypeToken<ArrayList<CodeList>>() {}.getType());
Creo que esto resolverá su pregunta. Buena suerte.
- Cómo decodificar y codificar la imagen base64 sin perder la calidad y el tamaño
- ¿Cómo agregar un listview dentro de un viewpager?