Невозможно включить кнопку в Activity после настраиваемого адаптера. Редактировать текст afterTextChanged () - PullRequest
0 голосов
/ 05 сентября 2018

В этом проекте MainFragment классы пользовательских адаптеров используются для просмотра списка загрузки. Элементы адаптера заполняются из класса бина с именем «PayMode». В этом адаптере есть четыре TextView и один EditText (allocAmt). Этот EditText не заполняется из этого класса бинов. AfterTextChanged для этого 'Edittext' Logcat правильно отображает текст 'editable.toString ()'.

Теперь мне нужно включить кнопку (в MainFragment) afterTextChanged listner для этого 'Edittext (allocAmt)' в адаптере. Ниже мой код.

Adapter.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);
        }
}

1 Ответ

0 голосов
/ 05 сентября 2018

вы можете попробовать использовать holder.allocatedAmt.setOnFocusChangeListener и переопределить его onFocusChange метод.

внутри onFocusChange добавить код ниже

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

Надеюсь, что поможет

...