我有一个动态列表视图,在每一行中我都有一个动态的EditText和一个动态CheckBox以及一些来自数据库的数据。下面的代码说明了它的一部分。
我没有找到一种方法来适当地设置(填充)EditText和CheckBox。此列表视图位于片段列表中。当我在同一屏幕上单击另一个片段中的按钮时,我想捕获列表视图的每一行中的信息。
你可以给我一些提示来自定义下面的代码,并根据我的意愿适当填写EditText和CheckBox吗?
正在发生的一个问题是,当我填充listview第一行中的第一个EditText时,listview的最后一行中的最后一个EditText正在填充。我不知道它为什么会发生。
class PedidoAdapter extends BaseAdapter
{
private LayoutInflater layoutInflater;
private ArrayList<ProdutoDTO> productDetails = new ArrayList<>();
private int count;
private Context context;
private EditText editTextValorDoProduto;
private CheckBox checkBoxCompraRecorrente;
public PedidoAdapter(Context context, ArrayList<ProdutoDTO> product_details)
{
layoutInflater = LayoutInflater.from(context);
this.productDetails = product_details;
this.count = product_details.size();
this.context = context;
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return count;
}
@Override
public Object getItem(int arg0)
{
// TODO Auto-generated method stub
return productDetails.get(arg0);
}
@Override
public long getItemId(int arg0)
{
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
ProdutoDTO tempProduto = productDetails.get(position);
if (convertView == null)
{
convertView = layoutInflater.inflate(R.layout.pedido, null);
holder = new ViewHolder();
holder.product_name = (TextView) convertView.findViewById(R.id.product_name);
holder.principioativo = (TextView) convertView.findViewById(R.id.principioativo);
holder.valorDoProduto = (EditText) convertView.findViewById(R.id.editText2);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.product_name.setText(tempProduto.getProduto());
holder.principioativo.setText(tempProduto.getPrincipioativo());
holder.valorDoProduto.setText(tempProduto.getValor().toString());
holder.checkBox.setChecked(tempProduto.isVendaRecorrente());
return convertView;
}
static class ViewHolder
{
TextView product_name;
TextView principioativo;
EditText valorDoProduto;
CheckBox checkBox;
//Button addToCart;
}
}
我在下面的代码中填写了每个listview行的一部分。每行都有一个EditText和一个Checkbox,必须由用户填写。
public List<ItemPendenteDTO> getItemPendenteList(String url)
{
ItemPendenteDTO itemPendenteDTO;
JSONArray itemPendenteList;
try
{
String stringJson = JSONParser.getJSONFromAPI(url);
itemPendenteList = new JSONArray(stringJson);
for(int i=0; i < itemPendenteList.length(); i++)
{
itemPendenteDTO = new ItemPendenteDTO();
JSONObject obj = itemPendenteList.getJSONObject(i);
itemPendenteDTO.setIdItemPendente(obj.getInt("idItemPendente"));
itemPendenteDTO.setIdPedidoPendente(obj.getLong("idPedidoPendente"));
itemPendenteDTO.setIdProduto(obj.getLong("idProduto"));
itensPendentesDTO.add(itemPendenteDTO);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return itensPendentesDTO;
}
另外,我在xml文件中有一个标记,我在每行中为每个EditText插入值。
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editText2"
android:layout_marginTop="10dp"
android:layout_below="@+id/principioativo"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_toRightOf="@+id/txtValorDoProduto"
android:layout_toEndOf="@+id/txtValorDoProduto"
android:textColorHint="#ffffff"
android:background="#71cad2"
android:hint="Valor"/>
每个listview行中的复选框的代码如下所示。
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Aceito venda programada"
android:id="@+id/checkBox"
android:textColor="#000000"
android:layout_marginTop="10dp"
android:layout_below="@+id/editText2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>