我有一个扩展的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。我如何解决这个问题?
答案 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;
}
}