我在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
答案 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.etDesconto
和holder.etUnitario
进行修改,因为它们共享相同的对象focusHandler
。