2016-11-23 7 views
3

"OK"ボタンを押してデータベースのレジストリを変更してもリストビューの更新に問題がありますが、リストビューに入力された値は反映されません。スピナーとAlertDialogでリストビューを更新

アクティビティとクラスアダプタを付録します。

私が検索して見つけられなかったので、助けてください。

おかげ カルロスは

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(); 
     } 
    } 
} 

答えて

0

は、あなたがこのようなあなたのダイアログの正のボタンのonclickリスナーに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(); 
       } 
      }); 
+0

感謝をnotifyDataSetChangeを追加するが、リストビューは更新されません。 – Carlosd

関連する問題