如何将列表视图更改为文本视图中的更改(Android)

时间:2016-09-05 11:00:14

标签: android listview textwatcher

我正在尝试更新edittext中的更改列表

当我点击编辑文字时,我无法编辑值。 我得到以下错误..

IInputConnectionWrapper: getExtractedText on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection

这是我的Listadapter的代码

public class CartListAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private Context mContext;
    ProgressDialog pDialog;


    ArrayList<HashMap<String, String>> itemvalues;
    HashMap<String, String> itemlist;
    //    ImageLoader mImageLoader;
    public CartListAdapter(Context c,ArrayList<HashMap<String,String>>itemvalues) {
        this.mContext = c;
        this.itemvalues=itemvalues;

        inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //   mImageLoader = VolleyClass.getInstance().getImageLoader();


    }

    @Override
    public int getCount() {
        return itemvalues.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }



    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        ViewHoldercart holder=null;
        View view = convertView;
        itemlist = itemvalues.get(position);
        if (view == null) {
            holder = new ViewHoldercart();

            view = inflater.inflate(R.layout.cartlistrow, parent, false);


            // holder.imageView = (NetworkImageView) view.findViewById(R.id.icon);
            //holder.progressBar = (ProgressBar) view.findViewById(R.id.product_grid_text);
            holder.itemname =(TextView)view.findViewById(R.id.itemname);
            holder.itemamount =(TextView)view.findViewById(R.id.itemamount);
            holder.itemqty=(EditText)view.findViewById(R.id.itemqty);
            holder.closebtn=(ImageView)view.findViewById(R.id.closebtn);
            holder.itemid1 =(TextView)view.findViewById(R.id.itemid1);
            holder.itemtotal =(TextView)view.findViewById(R.id.itemtotal);
            view.setTag(holder);
        } else {
            holder = (ViewHoldercart) view.getTag();
        }
        holder.itemid1.setText(itemvalues.get(position).get("itemid"));
        holder.itemname.setText(itemvalues.get(position).get("itemname"));
        holder.itemamount.setText(itemvalues.get(position).get("itemrate"));
        holder.itemqty.setText(itemvalues.get(position).get("itemqty"));
        holder.itemtotal.setText(itemvalues.get(position).get("total"));


        holder.itemqty.addTextChangedListener(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) {

                cartListAdapter.notifyDataSetChanged();
            }


            @Override
            public void afterTextChanged(Editable s) {
                try {
                    HashMap<String, String> hh = itemvalues.get(position);
                    double qty1 = Double.parseDouble(s.toString());
                    //    Log.d("value",s.toString());
                    double itemprice1 = Double.parseDouble(hh.get("itemrate").toString());
                    double temptotal = (qty1 * itemprice1);
                    hh.put("total",String.valueOf(temptotal));
                    itemvalues.set(position,hh);
                    granttotal =0.0;
                    for(int j = 0; j< itemvalues.size();j++){
                        granttotal = granttotal+Double.parseDouble(itemvalues.get(j).get("total"));
                    }
                    // Log.d("value",String.valueOf(granttotal));
                    grandtotal.setText(String.valueOf(df.format(granttotal)));


                }catch(NumberFormatException e){

                }
                cartListAdapter.notifyDataSetChanged();
            }
        }
        );



        holder.closebtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                itemvalues.remove(position);
                granttotal =0.0;
                for(int j = 0; j<itemvalues.size();j++){
                    granttotal = granttotal+Double.parseDouble(itemvalues.get(j).get("total"));
                }
                grandtotal.setText(String.valueOf(df.format(granttotal)));

            }

        });

        //holder.imageView.setImageUrl(AppConstant.category_image_url+catitems.get("cat_icon1"),mImageLoader);
        return view;

    }


}

class ViewHoldercart {
    // NetworkImageView imageView;
    EditText itemqty;
    TextView itemamount,itemname,itemid1,itemtotal;
    ImageView closebtn;
}

我已经尝试过onTextChanged。同样的结果。

提前致谢.. !!

3 个答案:

答案 0 :(得分:0)

您必须在工作之前删除文本更改侦听器,然后再添加侦听器

答案 1 :(得分:0)

如果你的lisview或Recycler视图中有edittext,那么在适配器类中添加这个TextWatcher类

private class MyCustomEditTextListener implements TextWatcher {
        private int position;
        private EditText editText;

        public MyCustomEditTextListener(EditText editText){
            this.editText= editText;
        }

        public void updatePosition(int position) {
            this.position = position;
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            switch (editText.getId()){
                case R.id.edtFirstName:
            itemvalues.get(position).put("itemqty", charSequence.toString());
                    break;
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {
        }
    }

宣布全球

public MyCustomEditTextListener listenerEdittext;

在getView()方法内部

之后
 if (view == null) {
        holder.itemqty = (EditText)view.findViewById(R.id.itemqty);
        this.listenerEdittext = new MyCustomEditTextListener(holder.itemqty);
        holder.itemqty.addTextChangedListener(listenerCompany);
    view.setTag(holder);
    }else{
     holder = (ViewHoldercart) view.getTag();
    }

    holder.listenerEdittext.updatePosition(position);
     holder.itemqty.setText(itemvalues.get(position).get("itemqty"));

答案 2 :(得分:0)

通过将编辑文本设为最终解决方案。

谢谢:)

相关问题