2015-12-26 31 views
5

Her liste öğesi için favori bir düğmeyle sahip olan bir listview ürünüm var; tıklatıldığında liste öğesini fav9rites olarak adlandırılan başka bir etkinliğe eklemelisiniz. Sık kullanılanlar eklemek için listview ve Sharedpreference için Baseadapter kullanıyorum. Favori düğmesini tıklattığımda, sık kullanılanlar etkinliğimde liste görünümü öğesi ekleniyor ancak şu sorunlarla karşılaşıyorum:Liste görünümünde sık kullanılanlar düğmesi ekleme

1) tıklatıldığında favori düğmesi, liste öğesinin eklendiğini belirten Favoriler. Bu olur ama ben aktiviteyi kapatıp tekrar geri geldiğimde, düğme sıkıcı aktivitemdeki liste öğesine uzun basıldığında,

2) geri dönüyorsa, liste öğesi favorilerden kaldırılmalı ama bu değil olay.

Umut herkes Kodum

sorum anlama

benim taban adaptörü

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

} 

benim 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

'code.equals (checkCode)' çalışıp çalışmadığını kontrol ettiniz mi? Bunun için '.equals' yöntemini uyguladınız mı? – Roshan

+0

@Roshan Evet kontrol ettim .it çalışıyor – user5524159

cevap

2

Aslında sizin saveFavorites() sadece gson.toJson (call becuse yöntem gayet iyi çalışıyor)

İstiyorsun (json formatında şeyi dönüştürmek) SharedPreferences ile veri kaydedilmiş olsun ve verilerinizi

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

almak için bu çizgiyi kullandık asla ile kaydedilen veri almak Bu çizgi, çünkü sen bir liste kaydetmek ve almak istediğiniz bir dizisi(!)

Eğer bir liste belirteci ile verilerinizi alınamadı gereken bir liste kurtardı edin. Ve bu soruyu çözmeniz gerektiğini düşünüyorum. Bu, sorununun çözüleceğini düşünüyorum. İyi şanslar.

+0

Yardım ettiğin için teşekkürler. Söylediğin gibi denedim ama favorilerimi açtığımda uygulama çöküyor ve bunu logcat'ta aldım. ComponentInfo {com.enlightenme.pac/com.enlightenme.pac.MyFavActivity}: başlatılamadı. – user5524159