2016-01-13 27 views
1

我有一個列表視圖,我正在使用swipe list view庫向列表視圖添加滑動功能。最初,如果我長時間點擊列表項目,該列表項目將被添加到我的收藏夾中。我想通過點擊菜單項來實現添加到收藏夾的過程,而不是長按。但我不知道如何實現它無法弄清楚如何在列表視圖中添加收藏夾

我對onitemlongclick

public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long arg3) 
{ 
    ImageView fvrtebutton = (ImageView) view.findViewById(R.id.favbtn); 


    String tag = fvrtebutton.getTag().toString(); 
    if (tag.equalsIgnoreCase("no")) { 
     shrdPreference.addFavorite(InterActivity.this, codelist.get(position)); 
     Toast.makeText(InterActivity.this, getString(R.string.fav_added), 
         Toast.LENGTH_SHORT).show(); 

     fvrtebutton.setTag("yes"); 
     fvrtebutton.setImageResource(R.drawable.favorite); 
    } else { 
     shrdPreference.removeFavorite(InterActivity.this, codelist.get(position)); 
     fvrtebutton.setTag("no"); 
     fvrtebutton.setImageResource(R.drawable.unfavorite); 
     Toast.makeText(InterActivity.this, 
         getString(R.string.fav_removed), 
         Toast.LENGTH_SHORT).show(); 
    } 

    Log.v("long clicked", "pos: " + position); 


    return false; 
} 

我刷卡菜單項,其代碼的onclick

SwipeMenuCreator creator = new SwipeMenuCreator() { 

      @Override 
      public void create(SwipeMenu menu) { 
       // create "open" item 
       SwipeMenuItem openItem = new SwipeMenuItem(InterActivity.this); 
       // set item background 
       openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 
                    0xCE))); 
       // set item width 
       openItem.setWidth(dp2px(90)); 
       // set item title 
       openItem.setTitle("Open"); 
       // set item title fontsize 
       openItem.setTitleSize(18); 
       // set item title font color 
       openItem.setTitleColor(Color.WHITE); 
       // add to menu 
       menu.addMenuItem(openItem); 

       // create "delete" item 
       SwipeMenuItem favoriteItem = new SwipeMenuItem(InterActivity.this); 
       // set item background 
       favoriteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 
                    0x3F, 0x25))); 
       // set item width 
       favoriteItem.setWidth(dp2px(90)); 
       // set a icon 
       favoriteItem.setIcon(R.drawable.unfavorite); 

       // add to menu 
       menu.addMenuItem(favoriteItem); 


      } 
     }; 
     // set creator 
     listview.setMenuCreator(creator); 

     listview.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { 
        //ApplicationInfo item = mAppList.get(position); 
        switch (index) { 
         case 0: 
          // open 
          //open(item); 
          break; 
         case 1: 
          // favorite 

       if(favoriteItem.getIcon().equals(getResources().getDrawable(R.drawable.unfavorite))){ 
        Toast.makeText(InterActivity.this, "yes", Toast.LENGTH_SHORT).show(); 
       } 

          break; 
        } 
        return false; 
       } 
      }); 

不能適用getTag()滑動菜單項 甚至嘗試使用equals()比較drawable,但得到nullpointerexception

getview(我的適配器)

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.favariteImage = (ImageView) view.findViewById(R.id.favbtn); 

     view.setTag(holder); 

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


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





    return view; 
} 

public boolean checkFavoriteItem(CodeList checkCodes) { 
    boolean check = false; 
    List<CodeList> favorites = shrdprfrnce.getFavorites(context); 
    if (favorites != null) { 
     for (CodeList codes : favorites) { 
      if (codes.equals(checkCodes)) { 
       check = true; 
       break; 
      } 
     } 
    } 
    return check; 
} 

這是我試圖

public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { 
        //ApplicationInfo item = mAppList.get(position); 
        switch (index) { 
         case 0: 
          // open 
          //open(item); 
          break; 
         case 1: 
          // favorite 

       CodeList codes = (CodeList) getItem(position); 
       ImageView fvrtebutton= (ImageView) findViewById(R.id.favbtn); 

          if (checkFavoriteItem(codes)){ 
           shrdPreference.removeFavorite(InterActivity.this, codelist.get(position)); 
     fvrtebutton.setTag("no"); 
     favoriteItem.setIcon(R.drawable.unfavorite); 
     fvrtebutton.setImageResource(R.drawable.unfavorite); 
     Toast.makeText(InterActivity.this, 
         getString(R.string.fav_removed), 
         Toast.LENGTH_SHORT).show(); 

          }else{ 

           shrdPreference.addFavorite(InterActivity.this, codelist.get(position)); 
     Toast.makeText(InterActivity.this, getString(R.string.fav_added), 
         Toast.LENGTH_SHORT).show(); 

     fvrtebutton.setTag("yes"); 
     fvrtebutton.setImageResource(R.drawable.favorite); 
     favoriteItem.setIcon(R.drawable.favorite); 
           } 


          break; 
        } 
        return false; 
       } 

       private boolean checkFavoriteItem(CodeList checkCodes) { 
        boolean check = false; 
        List<CodeList> favorites = shrdPreference.getFavorites(InterActivity.this); 
        if (favorites != null) { 
         for (CodeList codes : favorites) { 
          if (codes.equals(checkCodes)) { 
           check = true; 
           break; 
          } 
         } 
        } 
        return check; 
       } 



       private Object getItem(int position) 
       { 
        return codelist.get(position); 
       } 
      }); 

我的管線230的方法

favoriteItem.setIcon(R.drawable.favorite) 

我的logcat

13 15:46:21.801 4689 4689ËAndroidRuntime致命異常:主 01-13 15:46:21.801 4689 4689ÊAndroidRuntime過程: com.enlightenme.pac,PID:4689 01-13 15 :46:21.801 4689 4689 E AndroidRuntime java.lang.NullPointerException:試圖調用虛函數'void com.baoyz.swipemenulistview.SwipeMenuItem.setIcon(int)'null object reference 01-13 15:46:21.801 4689 4689 E AndroidRuntime在 com.enlightenme.pac.InterActivity $ RemoteDataTask $ 100000001.onMenuItemClick(InterActivity.java:230) 01-13 15:46:21.801 4689 4689 E AndroidRu n時間 在com.baoyz.swipemenulistview.SwipeMenuListView $ 100000000.onItemClick(SwipeMenuListView.java:78) 01-13 15:46:21.801 4689 4689ËAndroidRuntime 在com.baoyz.swipemenulistview.SwipeMenuView.onClick(SwipeMenuView.java:85 ) 01-13 15:46:21.801 4689 4689 E AndroidRuntime at android.view.View.performClick(View.java:4780)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.view.View $ PerformClick.run(View.java:19866)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.os.Handler.handleCallback(Handler.java:739)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.os.Handler.dispatchMessage(Handler.java:95)01-13 15: 46:21.801 4689 4689 E AndroidRuntime在 android.os.Looper.loop(Looper.java:135)01-13 15:46:21.801 4689 4689 E AndroidRuntime at android.app.ActivityThread.main(ActivityThread。java:5254)01-13 15:46:21.801 4689 4689 E AndroidRuntime at java.lang.reflect.Method.invoke(Native Method)01-13 15:46:21.801 4689 4689 E AndroidRuntime java.lang .reflect.Method.invoke(Method.java:372)01-13 15:46:21.801 4689 4689 E AndroidRuntime com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 01 -13 15:46:21.801 4689 4689 E AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)01-13 15:46:21.796 4689 4689 D AndroidRuntime 關閉VM 01-13 15:46:21.801 4689 4689 E AndroidRunti13 15:46:21.801 4689 4689 E AndroidRuntime 嚴重例外:主01-13 15:46:21.801 4689 4689 E AndroidRuntime進程: com.enlightenme.pac,PID:4689 01-13 15:46:21.801 4689 4689 E AndroidRuntime java.lang.NullPointerException:試圖調用虛擬方法'void com.baoyz.swipemenulistview.SwipeMenuItem.setIcon (int)'null object reference 01-13 15:46:21.801 4689 4689 E AndroidRuntime at com.enlightenme.pac.InterActivity $ RemoteDataTask $ 100000001.onMenuItemClick(InterActivity.java:230) 01-13 15:46:21.801 4689 4689 E AndroidRuntime at com.baoyz.swipemenulistview.SwipeMenuListView $ 100000000.onItemClick(SwipeMenuListView.java :78) 01-13 15:46:21.801 4689 4689 E AndroidRuntime at com.baoyz.swipemenulistview.SwipeMenuView.onClick(SwipeMenuView.java:85) 01-13 15:46:21.801 4689 4689 E AndroidRuntime at android .view.View.performClick(View.java:4780)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.view.View $ PerformClick.run(View.java:19866)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.os.Handler.handleCallback(Handler.java:739)01 -13 15:46:21.801 4689 4689 E AndroidRuntime在 android.os.Handler.dispatchMessage(Handler.java:95)01-13 15:46:21.801 4689 4689 E AndroidRuntime在 android.os.Looper.loop (Looper.java:135)01-13 15:46:21.801 4689 4689 E AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:5254)01-13 15:46:21.801 4689 4689 E AndroidRuntime at java.lang.reflect.Method.invoke(Native Method)01-13 15:46: 21.801 4689 4689ËAndroidRuntime在 java.lang.reflect.Method.invoke(Method.java:372)01-13 15:46:21.801 4689 4689ËAndroidRuntime在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run(ZygoteInit.java:903) 01-13 15:46:21.801 4689 4689 E AndroidRuntime at com.android.internal.os.ZygoteInit 。主要(ZygoteInit.java:698)01-13 15:46:21.796 4689 4689 d AndroidRuntime 關閉VM 01-13 15:當你正在使用checkFavoriteItem() 21.801 4689 4689ËAndroidRunti

+0

你這是在'tag'存儲?我的意思是當你使用'setTag()'時你存儲了什麼值? –

+0

@RRR SetTag滑動菜單項或fvrtbtn ?.沒有理解你的問題 – user5524159

+0

setTag to fvrtebutton –

回答

0

:46您的getView檢查它是否在收藏列表中,您可以在您的onMenuItemClick中使用相同的方法。

您將獲得點擊的項目,以便位置,

case 1: 
    //favorite 
     CodeList codes = (CodeList) getItem(position); 
     if (checkFavoriteItem(codes)) 
     //its in favorite list, do coding for remove from favorite 
     else 
     //its not in favorite list, do coding to add it in favorite 
+0

我會嘗試現在它讓你知道。謝謝 – user5524159

+0

嘗試過,但是當我點擊時,應用程序崩潰,但是當我重新打開活動時,點擊的項目被添加到收藏夾。發佈我試過的方法和logcat – user5524159