首页 > 解决方案 > 自定义适配器后无法在 Activity 中启用按钮编辑文本 afterTextChanged()

问题描述

在这个项目 MainFragment 中,自定义适配器类用于加载列表视图。适配器项由名为“PayMode”的 bean 类填充。在该适配器中有四个“TextView”和一个“EditText (allocatedAmt)”。那个 'EditText' 不是从那个 bean 类中填充的。'Edittext' Logcat 上的 AfterTextChanged 正确显示文本'editable.toString()'。

现在我需要为适配器中的“Edittext(allocatedAmt)”启用一个按钮(在 MainFragment 中)afterTextChanged 监听器。下面是我的代码。

适配器.java

public class PayModeAdapter extends ArrayAdapter<PayMode> {

    Context context;
    ArrayList<PayMode> list;
    boolean isAllocatedFinished = false;

    public PayModeAdapter(Context context, ArrayList<PayMode> list ) {
        super(context, R.layout.row_pay_mode, list);
        this.context = context;
        this.list = list;

    }

    public boolean isAllocatedFinished() {
        return isAllocatedFinished;
    }

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

        LayoutInflater inflater = null;
        View row = convertView;
        Holder holder = null;
        final PayMode payMode = list.get(position);

        if (row == null)
        {
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.row_pay_mode, parent, false);

            holder = new Holder();

            holder.mode = (TextView) row.findViewById(R.id.txtPayMode);
            holder.date = (TextView) row.findViewById(R.id.txtPayDate);
            holder.amt = (TextView)row.findViewById(R.id.txtAmount);
            holder.remAmt = (TextView)row.findViewById(R.id.txtRemAmount);
            holder.allocatedAmt = (EditText)row.findViewById(R.id.editAlloAmount);

            holder.allocatedAmt.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void afterTextChanged(Editable editable) {

                    isAllocatedFinished = true;
                    Log.d("PAY_MODE_ADAPTER", "VALUE_IS: " + editable.toString());

                }
            });

            row.setTag(holder);
        }
        else
        {
            holder = (Holder)row.getTag();
        }

        holder.mode.setText(payMode.getFPAYMODE_PAID_TYPE());
        holder.date.setText(payMode.getFPAYMODE_PAID_DATE());
        holder.amt.setText(payMode.getFPAYMODE_PAID_AMOUNT());
        holder.remAmt.setText(payMode.getFPAYMODE_PAID_AMOUNT());
        holder.allocatedAmt.setText("0.00");

        return row;
    }

    class Holder {
        TextView mode;
        TextView date;
        TextView amt;
        TextView remAmt;
        EditText allocatedAmt;
    }
}

MainFragment.java

onCreateView(){
payModeArrayList = new PayModeDS(getActivity()).getAllPayModeDetails();
        payModeAdapter = new PayModeAdapter(getActivity(), payModeArrayList);

        if (payModeAdapter.isAllocatedFinished()){

            bCancel.setEnabled(true);
        }
}

标签: androidlistviewandroid-fragmentsandroid-edittextandroid-adapter

解决方案


您可以尝试使用holder.allocatedAmt.setOnFocusChangeListener并覆盖其onFocusChange方法。

在里面onFocusChange添加下面的代码

if(!hasFocus) 
{
//your changes here 
}

希望有帮助


推荐阅读