实现SwipeMenuListView特定item的右滑menu无效

项目中增加需求:

根据不同来源的数据,修改展示页面及响应。



对于之前的数据来源,定为“来源一”  

       新的特殊数据来源,定为“来源二


一、对SwipeMenuListView的研究及修改

  

  通过之前转的关于SwipeMenuListView源码的解析 及自己对源码的阅读,发现数据展示页面右滑出现的menu的样式的修改可以通过adapter的viewtype来处理。

而,取消删除按钮的响应,可以简单的为SwipeMenu类增加一个boolean类型的变量isDisabled。如果是来源二的数据,就调用set方法将该变量设置为true。这样,在MenuItem的监听中增加判断即可。而set方法的调用,我选择再MenuItem的creator中来做。


代码:

1、adapter中增加viewtype

public static final int viewtype_normaldata = 0,viewtype_erpdata = 1;

@Override
public int getViewTypeCount() {
   // menu type count
   return 2;
}

@Override
public int getItemViewType(int position) {
   // current menu type
   return myList.get(position).containsKey("is_erp")?viewtype_erpdata:viewtype_normaldata;
}

注意:viewtype的值必须在0~getViewTypeCount()-1 之间。


2、新的creator

SwipeMenuCreator creator = new SwipeMenuCreator() {

   @Override
   public void create(SwipeMenu menu) {
      switch (menu.getViewType()){
         case SwipeMenuListViewAdapter.viewtype_normaldata:
            // create "delete" item
            SwipeMenuItem deleteItem = new SwipeMenuItem(
                  getApplicationContext());
            // set item background
            deleteItem.setBackground(new ColorDrawable(Color.rgb(0xFF,
                  0x63, 0x63)));
            // set item width
            deleteItem.setWidth(dp2px(90));
            // set a icon
            deleteItem.setTitle("删除");
            deleteItem.setTitleSize(18);
            deleteItem.setTitleColor(Color.parseColor("#FFFFFF"));
            // deleteItem.setIcon(R.drawable.ic_delete);
            // add to menu
            menu.addMenuItem(deleteItem);
            break;
         case SwipeMenuListViewAdapter.viewtype_erpdata:
            // create "delete" item
            SwipeMenuItem deleteItem_erp = new SwipeMenuItem(
                  getApplicationContext());
            // set item background
            deleteItem_erp.setBackground(new ColorDrawable(Color.rgb(0xDD,
                  0xDD, 0xDD)));
            // set item width
            deleteItem_erp.setWidth(dp2px(90));
            // set a icon
            deleteItem_erp.setTitle("删除");
            deleteItem_erp.setTitleSize(18);
            deleteItem_erp.setTitleColor(Color.parseColor("#FFFFFF"));
            // deleteItem.setIcon(R.drawable.ic_delete);
            // add to menu
            menu.addMenuItem(deleteItem_erp);
            menu.setIsDisabled(true);
            break;
      }


   }
};

3、Item的监听是在SwipeMenuListView的setAdapter中添加的

@Override
public void setAdapter(ListAdapter adapter) {
   super.setAdapter(new SwipeMenuAdapter(getContext(), adapter) {
      @Override
      public void createMenu(SwipeMenu menu) {
         if (mMenuCreator != null) {
            mMenuCreator.create(menu);//创建好这个SwipeMenu
         }
      }

      @Override
      public void onItemClick(SwipeMenuView view, SwipeMenu menu,
            int index) {
         if ((mOnMenuItemClickListener != null)&&(!menu.getIsDisabled())) {
            mOnMenuItemClickListener.onMenuItemClick(
                  view.getPosition(), menu, index);
         }
         if (mTouchView != null) {
            mTouchView.smoothCloseMenu();
         }
      }
   });
}

如果要根据不同的MenuItem做不同的响应,就在真正的

mOnMenuItemClickListener
中根据

menu.getViewType()

在switch中分别处理一下就可以了。

mListView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
   @Override
   public void onMenuItemClick(int position, SwipeMenu menu, int index) {
             switch (menu.getViewType()){
                 case SwipeMenuListViewAdapter.viewtype_normaldata:
                 break;
                 case SwipeMenuListViewAdapter.viewtype_erpdata:
                     Intent intent = new Intent(mContext,
                             DialogDelStudentActivity.class);
                     String idJSON = mAdapter.getList().get(position).get("id")
                             .toString();
                     intent.putExtra("idJSON", idJSON);
                     intent.putExtra("type", "delStudent");
                     startActivityForResult(intent, 1);
                     break;
             }
   }
});



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值