如何通过内部Button.setOnClickListener操纵内部EditText的值

时间:2016-05-20 13:45:50

标签: android class listview android-arrayadapter

我有一个扩展的ArrayAdapter类,在getView函数中为每个listitem充气一个带有EditText和Button的布局我需要在按下Button时EditText的值增加,Iam尝试使用这段代码:

@Override
    public View getView(int position, final View convertView, ViewGroup parent) {

        View item = convertView;
        if (item == null){
            LayoutInflater inflater =  LayoutInflater.from(getContext());
            item = inflater.inflate(R.layout.lista_clientes, null);
        }

        TextView p = (TextView)item.findViewById(R.id.txtProd);
        Button bMas = (Button)item.findViewById(R.id.btnMas);
        Button bMen = (Button)item.findViewById(R.id.btnMenos);

        EditText txtCant = (EditText) item.findViewById(R.id.txtCantidad);
        bMas.setOnClickListener(new View.OnClickListener() {
            Integer n = 0;

            @Override
            public void onClick(View v) {
                n++;
                txtCant.setText(String.valueOf(n));//ERROR (txtCant)
            }
        });

        p.setText(datosProd.get(position).getProducto());
        return item;
    }

但是这给出了一个错误:"变量txtCant是从内部类中访问的,需要声明最终"如果我这样做(声明fina)我不能使用setText。我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您需要增加每个网格项的计数,请在某处添加一个全局变量,并在每次按下某个按钮时为相应位置增加该值。

E.g。

Config.java file:

在这里为每个项目声明一个变量(如果您知道将填充多少项目。)

    public class Config {


    public static final int countItem1=0;
    public static final int countItem2=0;
    public static final int countItem2=0;
}

现在点击onClick按钮,检查位置和相应的值并增加它。

E.g。

    @Override
                public void onClick(View v) {
                    switch(position)
                   {
                         case 0:
                         int n=Config.countitem1;
                         txtCant.setText(String.valueOf(n+1);
                         Config.countItem1++;
                         break;
                         .....


                         .....
                   }
                }
            });

或者,您可以简单地在网格的onItemClickListener上并在那里应用逻辑。将网格中的项目设为focusable=false

修改

添加一个扩展BaseAdapter的sampple适配器类。 我添加了你的变量名称和所有。如果有效,请告诉我。

public class CustomListAdapterList extends BaseAdapter {
    private ArrayList<xyz> listData;
    private LayoutInflater layoutInflater;
    Context context;
    boolean state;
    public CustomListAdapterRList(Context aContext, ArrayList<xyz> listData) {

        this.listData = listData;
        this.context = aContext;
        layoutInflater = LayoutInflater.from(aContext);

    }
    @Override
    public int getCount() {
        return listData.size();
    }
    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        View v=convertView;
        if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.grid_dish_single, null);
                holder = new ViewHolder();
                holder.p = (TextView) convertView.findViewById(R.id.txtProd);
                holder.txtCant = (EditText) convertView.findViewById(R.id.txtCantidad);
                holder.bMen = (Button) convertView.findViewById(R.id.btnMas);
                holder.bMas = (Button) convertView.findViewById(R.id.btnMenos);
                convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.bMas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state=holder.bMas.isSelected();

                if(!state) {
                        int n=Integer.valuesOf(holder.txtCant.getText().toString().trim());
                        holder.txtCant.setText(String.valueOf(n+1));


                }

        return convertView;
    }

    static class ViewHolder {
        TextView p;
        EditText txtCant ;
        Button bMas ;
        Button bMen;
    }
}