使用微调器和AlertDialog进行listview更新

时间:2016-11-23 01:51:38

标签: android listview

我在更新列表视图时遇到问题,按“确定”按钮,修改数据库中的注册表,但不会反映在列表视图中输入的值。

附上活动和班级适配器。

任何帮助都会受到赞赏,因为我已经搜索过但没有找到它。

感谢 卡洛斯

    EditText edt3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pedidos);

        pbr2 = (ProgressBar) findViewById(R.id.progressBar2);
        listap = (ListView) findViewById(R.id.listview2);
        spinnerFam = (Spinner) findViewById(R.id.spinner2);

        connectionClass = new ConnectionClass();
        helper = new DBHelper(this);
        db = helper.getWritableDatabase();

        gruposAdapter = new GruposAdapter(this,android.R.layout.simple_spinner_dropdown_item,helper.recuperarGrupos());
        gruposAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinnerFam.setAdapter(gruposAdapter);
        spinnerFam.setOnItemSelectedListener(this);

        productosList = helper.recuperarProductos();
        productosAdapter = new ProductosAdapter(this,productosList);
        listap.setAdapter(productosAdapter);

        listap.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Productos productos = productosAdapter.getItem(i);
                final String idprod = productos.getCodigo();

                LayoutInflater inflater = getLayoutInflater();
                final View dialoglayout = inflater.inflate(R.layout.dialog,null);
                final EditText etcant = (EditText) dialoglayout.findViewById(R.id.editText4);
                final TextView tvcant = (TextView) dialoglayout.findViewById(R.id.textView15);

                tvcant.setText(productos.getDescripcion());
                etcant.setText(String.valueOf(productos.getCantidad()));
                etcant.setSelectAllOnFocus(true);

                AlertDialog.Builder builder = new AlertDialog.Builder(Pedidos.this);
                builder.setView(dialoglayout);

                builder.setPositiveButton("Aceptar", new  DialogInterface.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Integer cantidad = Integer.valueOf(etcant.getText().toString());
                        helper.actualizarCantProd(idprod,cantidad);

                    }
                });

                builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });

                builder.show();
                productosAdapter.notifyDataSetChanged();
               // Toast.makeText(Pedidos.this, codspinini, Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
       Grupos grupos = gruposAdapter.getItem(position);
        productosAdapter.getFilter().filter(Long.toString(grupos.getCodGrup()), new Filter.FilterListener() {
            @Override
            public void onFilterComplete(int i) {
            }
        });

    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }

}

public class ProductosAdapter extends BaseAdapter implements Filterable {
    private LayoutInflater pLayoutInflater;
    private List<Productos> productosList;
    private List<Productos> productosFilterList;
    private ProductosFilter productosFilter;
    private Context context;

    public ProductosAdapter(Context context, List data){
        productosList = data;
        productosFilterList = data;
        pLayoutInflater = LayoutInflater.from(context);
        this.context = context;
    }

    @Override
    public int getCount() {
        return productosList.size();
    }

    @Override
    public Productos getItem(int i) {
        return productosList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View updateViewp;
        final ViewHoler viewHoler;
        if (view == null){
            updateViewp = pLayoutInflater.inflate(R.layout.productodetalle, null);
            viewHoler = new ViewHoler();

            viewHoler.cantidad = (TextView) updateViewp.findViewById(R.id.textView14);
            viewHoler.codigo = (TextView) updateViewp.findViewById(R.id.textView11);
            viewHoler.descripcion = (TextView) updateViewp.findViewById(R.id.textView12);
            viewHoler.precio = (TextView) updateViewp.findViewById(R.id.textView13);

            updateViewp.setTag(viewHoler);
        } else {
            updateViewp = view;
            viewHoler = (ViewHoler) updateViewp.getTag();
        }
        final Productos item = getItem(i);
            viewHoler.cantidad.setText(String.valueOf(item.getCantidad()));
            viewHoler.codigo.setText(item.getCodigo());
            viewHoler.precio.setText(String.valueOf(item.getPrecioNeto()));
            viewHoler.descripcion.setText(item.getDescripcion());

        return updateViewp;
    }

    @Override
    public Filter getFilter() {
        if (productosFilter == null){
            productosFilter = new ProductosFilter();
        }
        return productosFilter;
    }

    static class ViewHoler {
        TextView cantidad;
        TextView descripcion;
        TextView codigo;
        TextView precio;
    }


    private class ProductosFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            long codGrupId = Long.parseLong(charSequence.toString());
            FilterResults results = new FilterResults();

            if (codGrupId > 0) {
                ArrayList<Productos> filterListp = new ArrayList<Productos>();
                for (int i = 0; i < productosFilterList.size(); i ++) {
                    if ((productosFilterList.get(i).getCodgrupo()) == codGrupId){
                        Productos productos = productosFilterList.get(i);
                        filterListp.add(productos);
                    }
                }
                results.count = filterListp.size();
                results.values = filterListp;
            } else {
                results.count = productosFilterList.size();
                results.values = productosFilterList;
            }

            return results;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            productosList = (ArrayList<Productos>)filterResults.values;
            notifyDataSetChanged();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

可能你应该在对话框的正面按钮onclick listener中通知notifyDataSetChange,如下所示:

builder.setPositiveButton("Aceptar", new  DialogInterface.OnClickListener(){

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Integer cantidad = Integer.valueOf(etcant.getText().toString());
                    helper.actualizarCantProd(idprod,cantidad);
                    productosAdapter.notifyDataSetChanged();
                }
            });