动态EditText和CheckBox以及ListView的每一行中的一些数据

时间:2016-07-09 17:06:33

标签: android listview android-studio baseadapter android-listfragment

我有一个动态列表视图,在每一行中我都有一个动态的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"
    />

0 个答案:

没有答案