我在每行都有一个带有EditText的Listview。 我需要获得焦点行的ID。 在我的代码中,holder.valor.getId();总是返回相同的ID。我不明白为什么!
在其他活动中,我想要扩展edittext并从操作栏按钮更改键盘类型。
这是我的代码:
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
final String marca;
final String producto;
try {
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.row_lista_form, null);
holder.item = (TextView) convertView.findViewById(R.id.item);
holder.valor = (EditText) convertView.findViewById(R.id.valor);
holder.valor.setInputType(InputType.TYPE_CLASS_PHONE);
holder.imgCam = (ImageView) convertView.findViewById(R.id.cambutton);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
marca = getlForm().get(position).getMarca();
producto = getlForm().get(position).getProducto();
final int proyectoproducto = getlForm().get(position).getProyectoProductoId();
String valor = getlForm().get(position).getCantidad();
if (valor == null || valor.equals("null"))
valor = "";
holder.item.setText(marca + "\n" + producto);
holder.valor.setText(valor);
// Listener : If focus lost, we insert value in db
holder.valor.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// update row
Formulario f = getlForm().get(position);
EditText et = (EditText) v;
f.setCantidad(et.getText().toString());
f.setSync(0);
FormHandler fh = new FormHandler(ctx);
boolean existForm = fh.existForm(f);
if (!existForm)
fh.addForm(f);
else
fh.updateForm(f);
}else{
// We have the focus, we send the id in the prefs,
// to send it the change keyboard function
int editTextId = holder.valor.getId();
prefs.edit().putInt("metricaEtId", editTextId).commit();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
return convertView;
}
答案 0 :(得分:0)
使用
v.getId();
在
onFocusChange(View v,....