• [Android-2A] -仿IOS微信滑动删除_SwipeListview左滑删除例子


    https://yunpan.cn/cueUIQkRafQrH (提取码:7ec1)

    关于这样类似的例子网上的代码很多,最近发现这个例子里的代码在开发中会遇到一系列的问题。比如ListView的OnItemClickListener中无法获取在AppAdapter中getView方法convertView setTag的数据,所以需要优化下。

    原因是控件中的SwipeMenuAdapter对Listview中的条目进行了修改和再封装。

    具体优化的思路为,将控件中的SwipeMenuAdapter去掉,把部分代码挪到Acitivity中的AppAdapter中。修改后的代码如下:

    class AppAdapter extends BaseAdapter  implements OnSwipeItemClickListener{
            
            @Override
            public int getCount() {
                return mAppList.size();
            }
    
            @Override
            public ApplicationInfo getItem(int position) {
                return mAppList.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder = null;
                SwipeMenuLayout layout = null;
                if (convertView == null) {
                    convertView = View.inflate(getApplicationContext(), R.layout.item_list_app, null);
                    holder = new ViewHolder(convertView);
                    SwipeMenu menu = new SwipeMenu(mContext);
                    menu.setViewType(new Random().nextInt(3));//随机选择样式
                    createMenu(menu);
                    SwipeMenuView menuView = new SwipeMenuView(menu,(SwipeMenuListView) parent);
                    menuView.setOnSwipeItemClickListener(this);
                    SwipeMenuListView listView = (SwipeMenuListView) parent;
                    layout = new SwipeMenuLayout(convertView, menuView, listView.getCloseInterpolator(), listView.getOpenInterpolator());
                    layout.setPosition(position);
                    layout.setTag(holder);
                } else {
                    layout = (SwipeMenuLayout) convertView;
                    layout.closeMenu();
                    layout.setPosition(position);
                    holder = (ViewHolder)layout.getTag();
                }
                ApplicationInfo item = getItem(position);
                holder.iv_icon.setImageDrawable(item.loadIcon(getPackageManager()));
                holder.tv_name.setText(item.loadLabel(getPackageManager()));
                return layout;
            }
    
            class ViewHolder {
                ImageView iv_icon;
                TextView tv_name;
                public ViewHolder(View view) {
                    iv_icon = (ImageView) view.findViewById(R.id.iv_icon);
                    tv_name = (TextView) view.findViewById(R.id.tv_name);
                }
            }
    
    
            
            public void createMenu(SwipeMenu menu) {
                if(creator != null) {
                    creator.create(menu);
                }
            }
    
            @Override
            public void onItemClick(SwipeMenuView view, SwipeMenu menu, int index) {
                if (mListView != null && mListView.getOnMenuItemClickListener() != null) {
                    mListView.getOnMenuItemClickListener().onMenuItemClick(view.getPosition(), menu, index);
                }
                
                if(mListView != null && mListView.getTouchView() != null) {
                    mListView.getTouchView().smoothCloseMenu();
                }
            }
        }

    Eclipse源码:https://yunpan.cn/cuepakBM7KaU5 (提取码:b860)

    Android Studio源码:https://yunpan.cn/cuephTqj8emRw (提取码:93e5)

  • 相关阅读:
    .Net Core Swagger配置
    MySQL如何使用索引
    一个HTTP Basic Authentication引发的异常
    跑步花钱吗?
    跑步花钱吗?
    OpenShift中的持续交付
    在AWS中部署OpenShift平台
    壮美大山包-2017中国大山包国际超百公里ITRA积分赛赛记
    膝盖中了一箭之康复篇-两周年纪念
    HashiCorp Vault介绍
  • 原文地址:https://www.cnblogs.com/royi123/p/5510815.html
Copyright © 2020-2023  润新知