禁用onActivityResult中的按钮

时间:2014-05-27 15:28:19

标签: android listview

我有一个按钮可以在页面浏览器中的列表视图中拍照。 所以,在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;
}

3 个答案:

答案 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);
}  
}