安卓解决listview的item嵌套多个edittext的问题

版权声明:本文为博主原创文章,转载请注明。 https://blog.csdn.net/qq_34698126/article/details/69364699

看过很多解决方式,但都会出现无法获取焦点的问题,但合适的只有一种,并且百试不爽,下面会详细介绍:

1、adapter里的关键代码

有两个edit,一个name一个price

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

    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.chat_creat_order_item, null);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    final ChatOrderBean bean = list.get(position);

    //This is important. Remove TextWatcher first.
    if (viewHolder.parts_name.getTag() instanceof TextWatcher) {
        viewHolder.parts_name.removeTextChangedListener((TextWatcher) viewHolder.parts_name.getTag());
    }
    if (viewHolder.parts_price.getTag() instanceof TextWatcher) {
        viewHolder.parts_price.removeTextChangedListener((TextWatcher) viewHolder.parts_price.getTag());
    }


    TextWatcher nameWatcher = 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) {
            if (TextUtils.isEmpty(s)) {
                bean.setAccessoriesName("");
            } else {
                bean.setAccessoriesName(s.toString());
            }
        }
    };
    TextWatcher priceWatcher = 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) {
            if (TextUtils.isEmpty(s)) {
                bean.setPrice(0.0);
            } else {
                bean.setPrice(Double.valueOf(s.toString()));
            }
        }
    };

    viewHolder.parts_name.addTextChangedListener(nameWatcher);
    viewHolder.parts_price.addTextChangedListener(priceWatcher);
    viewHolder.parts_name.setTag(nameWatcher);
    viewHolder.parts_price.setTag(priceWatcher);
   
    return convertView;
}


上面代码基本可以实现,但还会弹出键盘重新刷新getview的问题,下面解决:

2、在manifest里对应activity设置:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"





猜你喜欢

转载自blog.csdn.net/qq_34698126/article/details/69364699