我有一个按钮可以在页面浏览器中的列表视图中拍照。 所以,在listview的适配器中,我有一个onclick事件来拍摄照片。 我想要的是让onActivityResult(Inside活动)中的按钮对象禁用它 我试着用:
ListView lstForm;
View v = (View) lstForm.getItemAtPosition(position);
但我只是访问数据而不是按钮。
这是我在FormAdapter中的getView()方法
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
try {
if (convertView == null) {
vi = inflater.inflate(R.layout.row_lista_form, null);
holder = new ViewHolder();
holder.item = (TextView) vi.findViewById(R.id.item);
holder.valor = (EditText) vi.findViewById(R.id.valor);
holder.imgCam = (ImageView) vi.findViewById(R.id.cambutton);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
String marca = lForm.get(position).getMarca() + "\n" + lForm.get(position).getProducto();
String valor = lForm.get(position).getCantidad();
if (valor == null || valor.equals("null"))
valor = "";
holder.item.setText(marca);
holder.valor.setText(valor);
holder.imgCam.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ctx, "elemento numero:" + position + " metricaId:" + metricaId, Toast.LENGTH_SHORT)
.show();
takePic(TAKE_PIC_REQUEST, position, metricaId);
}
});
} catch (Exception e) {
}
return vi;
}
答案 0 :(得分:1)
您需要做的是在表示数据项的对象中添加一个布尔标志,以指示是应该启用还是禁用该按钮 - 并默认启用它。然后在onActivityResult
中获取相应的项目,将标志设置为禁用并强制列表重绘自身。在适配器的getView
方法中,如果相应地设置了标志,则禁用该按钮。
public class MyDataItem {
...
boolean canTakePicture = true;
...
public void setCanTakePicture(boolean fl) { canTakePicture = fl; }
public boolean isCanTakePicture() { return canTakePicture; }
}
在onActivityResult
:
ListView lstForm;
((MyDataItem) lstForm.getItemAtPosition(position)).setCanTakePicture(false);
lstForm.getAdapter().notifyDataSetChanged();
当然,你需要以某种方式知道你正在处理哪个position
- 但我猜你已经知道了。
和getView()
:
holder.item.setText(marca);
holder.valor.setText(valor);
holder.imgCam.setEnabled(lForm.get(position).isCanTakePicture()); // <-- this line added
holder.imgCam.setOnClickListener(new OnClickListener() {
...
});
答案 1 :(得分:1)
我认为最好不要从列表视图中获取视图项,而是在列表视图的getView方法中管理(取决于项目位置)按钮状态(启用/禁用),并在onActivityResult中调用notifydatasetchanged。
答案 2 :(得分:-2)
试试这个
@Override
protected void onActivityResult(int requestCode, int resultCode,
final Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == TAKE_PIC_REQUEST) {
holder.setEnabled(false);
holder.setClickable(false);
}
}