ListView行上的EditText中的多个焦点

时间:2015-01-06 15:17:39

标签: android

我在android上的ListView中为每一行都有一个edittext。 每个EditText都有一个事件单击以执行特定的系统要求。 问题是当我在第一行中的edittext上单击时,第六行也会获得焦点和单击事件。

这是我的FocusHandler,用于将事件设置为单击editText

私有类FocusHandler实现OnFocusChangeListener {

    @Override
    public void onFocusChange(View view, boolean hasFocus) {

        Log.d("PRODUTO", "ON FOCUS "+hasFocus+" "+view);
        if (!hasFocus) {
            if (focusedEditText != null) {
                focusedEditText.removeTextChangedListener(textWatcher);
                if (focusedEditText.getText().toString().equals("")) {
                    focusedEditText.setText(temp);
                }//end if
            }//end if
        } else {
            EditText et = (EditText) view;
            focusedEditText = et;
            temp = focusedEditText.getText().toString();
            focusedEditText.setText("");
            focusedEditText.addTextChangedListener(textWatcher);

        }// end else

        //focusedEditText = null;

    }// end method

}// end class

2 个答案:

答案 0 :(得分:0)

是的,当然......谢谢

@覆盖     public void bindView(最终的View视图,最终的Context上下文,最终的Cursor游标){

        LinearLayout llDescricao = (LinearLayout) view
                .findViewById(R.id.produtos_lldescricao);
        LinearLayout llComponentes = (LinearLayout) view
                .findViewById(R.id.produtos_llcomponentes);
        LinearLayout llImage = (LinearLayout) view
                .findViewById(R.id.produtos_llimage);
        LinearLayout llQtVolume = (LinearLayout) view
                .findViewById(R.id.produtos_llqtVolume);
        LinearLayout llQtTroca = (LinearLayout) view
                .findViewById(R.id.produtos_llqttroca);
        RelativeLayout rlProdutos = (RelativeLayout) view
                .findViewById(R.id.RelativeLayout_produtos);
        LinearLayout ll3 = (LinearLayout) view
                .findViewById(R.id.produtos_llcomponentes_3);
        LinearLayout llCorGrade = (LinearLayout) view
                .findViewById(R.id.produtos_llcorgrade);
        LinearLayout llCor = (LinearLayout) view
                .findViewById(R.id.produtos_llcor);
        rlProdutos.removeView(llImage);

        final ViewHolder holder = new ViewHolder();

        holder.spCor = (Spinner) view.findViewById(R.id.produtos_spCor);
        holder.spGrade = (Spinner) view.findViewById(R.id.produtos_spGrade);
        TextView tvCod = (TextView) view.findViewById(R.id.produtos_tvCod);
        TextView tvDescricao = (TextView) view
                .findViewById(R.id.produtos_tvDescricao);
        ImageView ivFoto = (ImageView) view
                .findViewById(R.id.produtos_ivProduto);

        tvCod.setText(cursor.getString(cursor
                .getColumnIndex("produto_codigo")));
        tvDescricao.setText(cursor.getString(cursor
                .getColumnIndex("produto_descricao")));

        holder.etQtd = (EditText) view
                .findViewById(R.id.produtos_etQuantidade);

            holder.btnMaisUm = (Button) view
                    .findViewById(R.id.produtos_btnMais);

            holder.btnMaisUm.setTag(holder.etQtd);

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

                @Override
                public void onClick(View v) {

                    Log.d("PRODUTO", "TRIGGER "+teste++);
                    Button button = (Button) v;
                    EditText et = (EditText) button.getTag();
                    et.requestFocus();
                    String qtdText = et.getText().toString();

                    if (qtdText.equals("")) {
                        qtdText = temp;
                    }// end if
                    float qtd = Float.parseFloat(qtdText) + 1;
                    et.setText(String.valueOf(qtd));

                }// end onClick
            });

        holder.etDesconto = (EditText) view
                .findViewById(R.id.produtos_etDesconto);
        // PEGAR DESCONTO VINDO DO PEDIDO ENVIADO PRA CA
        holder.etDesconto.setText(String.valueOf(pedido.getPdesconto()));
        holder.etDesconto.setOnFocusChangeListener(focusHandler);
        int editaDesconto = Integer.valueOf(prop
                .getProperty("config.edita_desconto"));
        if (editaDesconto == 0) {
            holder.etDesconto.setInputType(0);
            holder.etDesconto.setEnabled(false);
        }

        /**
         * CALCULAR UNITARIO ET UNITARIO
         */
        holder.etUnitario = (EditText) view
                .findViewById(R.id.produtos_etUnitario);
        holder.etUnitario.setOnFocusChangeListener(focusHandler);
        int editaUnitario = Integer.valueOf(prop
                .getProperty("config.edita_unitario"));
        if (editaUnitario == 0) {
            holder.etUnitario.setInputType(0);
            holder.etUnitario.setEnabled(false);
        }// end if

        /**
         * TEXTVIEW TOTAL
         */
        holder.tvTotal = (TextView) view
                .findViewById(R.id.produtos_tvTotal);

        holder.etQtd.setTag(R.id.etQuantidadeTroca, holder.etQtdTroca);
        holder.etQtd.setTag(R.id.spCorKey, holder.spCor);
        holder.etQtd.setTag(R.id.spGradeKey, holder.spGrade);
        holder.etQtd.setTag(R.id.etDescontoKey, holder.etDesconto);
        holder.etQtd.setTag(R.id.etUnitarioKey, holder.etUnitario);
        holder.etQtd.setTag(R.id.etUnitarioTabelaKey,
                holder.etUnitarioTabela);
        holder.etQtd.setTag(R.id.tvTotalKey, holder.tvTotal);
        holder.etQtd.setTag(R.id.produtoIdKey,
                cursor.getLong(cursor.getColumnIndex("_id")));
        holder.etQtd.setOnFocusChangeListener(new FocusHandler());
        holder.etDesconto.setTag(holder.etQtd);
        holder.etUnitario.setTag(holder.etQtd);
        holder.uuidProduto = cursor.getString(cursor
                .getColumnIndex("produto_uuid"));


}// end bindView

答案 1 :(得分:0)

您应该在所有FocusHandler()上设置新的setOnFocusChangeListener。您focusedEditText的成员FocusHandler class可以由每行的holder.etDescontoholder.etUnitario进行修改,因为它们共享相同的对象focusHandler