android踩坑之旅

仿钉钉的物品领用 在删除后,getview中数据没有绑定,导致数据错乱。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (bundleStr.equals("发起领用")) {
        final PickAdapter.ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_pick, parent, false);
            holder = new PickAdapter.ViewHolder();
            holder.pick_name = (TitleItem) convertView.findViewById(R.id.pick_input);
            holder.pick_item = (StartItem) convertView.findViewById(R.id.pick_item);
            holder.pick_number = (TextView) convertView.findViewById(R.id.pick_number);
            holder.delete = (TextView) convertView.findViewById(R.id.delete);
            convertView.setTag(holder);
        } else {
            holder = (PickAdapter.ViewHolder) convertView.getTag();
        }
        final HashMap map = dataList.get(position);
        if (holder.pick_name.getTag() instanceof TextWatcher || holder.pick_name.getTag() instanceof TextWatcher) {
            holder.pick_name.removeTextChangedListener((TextWatcher) (holder.pick_name.getTag()));
            holder.pick_item.removeTextChangedListener((TextWatcher) (holder.pick_item.getTag()));

        }
        String s = holder.pick_name.getRightString();
        if (map.get("name").equals("")) {
            holder.pick_name.setIssueTi("申领物品:", "");
            s = holder.pick_name.getRightString();
        } else {
            holder.pick_name.setIssueTi("申领物品:", map.get("name").toString());
        }

        if (map.get("number").equals(Config.SELECT)) {
            holder.pick_item.setStartItem("领用数量:", Config.SELECT);
        } else {
            holder.pick_item.setIssueSi("领用数量:", map.get("number").toString());
        }


        s = holder.pick_name.getRightString();
        TextWatcher name = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                holder.pick_name.getRightString();
                if (holder.pick_name.getRightString().equals("")) {
                    dataList.get(position).put("name", "");
                } else
                    dataList.get(position).put("name", holder.pick_name.getRightString());
            }
        };

        TextWatcher number = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                holder.pick_item.getRightString();
                dataList.get(position).put("number", holder.pick_item.getRightString());
            }
        };

        if (dataList.size() == 1) {
            holder.delete.setVisibility(View.GONE);
        } else holder.delete.setVisibility(View.VISIBLE);

        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(context)
                        .setTitle("你确定要删除" + holder.pick_number.getText().toString() + "吗?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dataList.remove(position);
                                adapter.notifyDataSetChanged();
                                setListViewHeightBasedOnChildren(pickList);


                            }
                        })
                        .setNegativeButton("取消", null)
                        .show().setCanceledOnTouchOutside(false);

            }
        });

        holder.pick_item.setRightOnClick(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ArrayList<String> list = new ArrayList<>();
                list.clear();
                for (int i = 1; i <= 10; i++) {
                    list.add("" + i);
                }
                list.add("大于10");
                CustomPicker.CustomOptionPicker(context, list, holder.pick_item, "数量选择");
            }
        });
        holder.pick_number.setText("物品明细(" + (position + 1) + ")");
        holder.pick_name.addTextChangedListener(name);
        holder.pick_item.addTextChangedListener(number);
        holder.pick_name.setTag(name);
        holder.pick_item.setTag(number);
    }
    if (bundleStr.equals("物品领用审批")||bundleStr.equals("领用进度查看")){
        final PickAdapter.ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_pick, parent, false);
            holder = new PickAdapter.ViewHolder();
            holder.pick_name = (TitleItem) convertView.findViewById(R.id.pick_input);
            holder.pick_item = (StartItem) convertView.findViewById(R.id.pick_item);
            holder.pick_number = (TextView) convertView.findViewById(R.id.pick_number);
            holder.delete = (TextView) convertView.findViewById(R.id.delete);
            convertView.setTag(holder);
        } else {
            holder = (PickAdapter.ViewHolder) convertView.getTag();
        }
        holder.pick_item.setIssueSi("领用数量:",dataList.get(position).get("number").toString());
        holder.pick_name.setIssueTi("申领物品:", dataList.get(position).get("name").toString());
        holder.pick_item.setEditNoBorder();
        holder.pick_name.setEditNoBorder();
        holder.delete.setVisibility(View.GONE);
        holder.pick_number.setText("物品明细(" + (position + 1) + ")");
    }
    return convertView;
}

7.0以后的文件打开需要fileProvider

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    //判断版本是否在7.0以上
    uri =
            FileProvider.getUriForFile(MyApplication.getContext(),
                    MyApplication.getContext().getPackageName() + ".fileprovider",
                    file);
    //添加这一句表示对目标应用临时授权该Uri所代表的文件

} else {
    uri = Uri.fromFile(file);
}

打开文件时需要根据版本进行判断,根据uri获取path的多种判断
 String imagePath = null;
        Uri uri = data.getData();
        if(DocumentsContract.isDocumentUri(getActivity(),uri)){
            String docId= DocumentsContract.getDocumentId(uri);
            if ("com.android.providers.media.documents".equals(uri.getAuthority())){
                String id = docId.split(":")[1];
                String selection = MediaStore.Images.Media._ID+"="+id;
                imagePath=getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);
            }
            else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())){
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(docId));
                imagePath=getImagePath(contentUri,null);

            }
        }

        else if ("content".equalsIgnoreCase(uri.getScheme())){
                //如果不是doc的uri,使用普通方式处理
                imagePath = getImagePath(uri,null);
            }
//            displayImage(imagePath);
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
             imagePath=uri.getPath();
        }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值