Я пытаюсь создать приложение, которое показывает сотруднику магазина, что нужно делать, чтобы помочь покупателю. Он показывает вопросы, которые сотрудник должен задать, чтобы понять, что нужно клиенту.
Проблема в том, что когда я пытаюсь выбрать продукт, я добавляю его в ListView с помощью ArrayList. Я могу добавить один продукт, но когда я пытаюсь добавить второй, он просто заменяет первый, который я добавил.
Код для Sellador.java (где я выбираю продукт, который нужно добавить)
public class Sellador extends AppCompatActivity {
String codigo,nombreproducto;
int ident,imagen,first;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sellador);
}
public void onButtonClick(View v){
if (v.getId() == R.id.selladorbco){
codigo = "600706";
nombreproducto = "Prueba desde boton sellador bco";
ident = 4;
imagen = R.drawable.guy1;
Intent agg2 = new Intent(this,ListaProductos.class);
agg2.putExtra("codigo",codigo);
agg2.putExtra("nombreproducto",nombreproducto);
agg2.putExtra("identificador",ident);
agg2.putExtra("imagen",imagen);
startActivity(agg2);
}
if (v.getId() == R.id.selladortrans){
codigo = "600705";
nombreproducto = "Prueba desde boton sellador trans";
ident = 2;
imagen = R.drawable.guy1;
Intent agg = new Intent(this,ListaProductos.class);
agg.putExtra("codigo",codigo);
agg.putExtra("nombreproducto",nombreproducto);
agg.putExtra("identificador",ident);
agg.putExtra("imagen",imagen);
startActivity(agg);
}
if (v.getId() == R.id.botonlista){
Intent cambiolista = new Intent(this, ListaProductos.class);
startActivity(cambiolista);
}
}
}
Код для ListaProductos.java (где я показываю ListView продуктов)
public class ListaProductos extends AppCompatActivity {
public String codigo,nombreproducto;
public int ident,imagen;
public ListView listaDatos;
public ArrayList<Producto> Lista;
public Adaptador miadaptador;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lista_productos);
aggPrimerProducto();
}
public void aggPrimerProducto(){
listaDatos = (ListView) findViewById(R.id.lstDatos);
Lista = new ArrayList<Producto>();
miadaptador = new Adaptador(this,Lista);
listaDatos.setAdapter(miadaptador);
Bundle extras = getIntent().getExtras();
codigo = extras.getString("codigo");
nombreproducto = extras.getString("nombreproducto");
ident = extras.getInt("ident");
imagen = extras.getInt("imagen");
agregarProducto(codigo,ident,imagen,nombreproducto);
}
public void agregarProducto(String code, int ident, int image, String name){
Lista.add(new Producto(code,ident,image,name));
miadaptador.notifyDataSetChanged();
}
public void onButtonClick(View v){
if (v.getId() == R.id.botonsig){
agregarProducto("66666",5,R.drawable.guy1,"Prueba con boton existente");
}
}
}
Код для адаптера:
public class Adaptador extends BaseAdapter {
Context contexto;
List<Producto> ListaObjetos;
public Adaptador(Context contexto, List<Producto> listaObjetos) {
this.contexto = contexto;
ListaObjetos = listaObjetos;
}
@Override
public int getCount() {
return ListaObjetos.size();
}
@Override
public Object getItem(int i) {
return ListaObjetos.get(i);
}
@Override
public long getItemId(int i) {
return ListaObjetos.get(i).getId();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View vista = view;
LayoutInflater inflate = LayoutInflater.from(contexto);
vista = inflate.inflate(R.layout.itemlistview,viewGroup,false);
ImageView imagen = (ImageView) vista.findViewById(R.id.imagenProducto);
TextView codigo = (TextView) vista.findViewById(R.id.txtCodigo);
TextView nombre = (TextView) vista.findViewById(R.id.txtNombre);
codigo.setText(ListaObjetos.get(i).getCodigo());
nombre.setText(ListaObjetos.get(i).getNombre());
imagen.setImageResource(ListaObjetos.get(i).getImagen());
return vista;
}
}
А еще лучше - минимальный воспроизводимый пример.
Я отредактировал вопрос и добавил код адаптера внизу, спасибо! Я постараюсь создать минимальную версию того, что я пытаюсь сделать.




Попробуйте заменить эту строку
miadaptador.notifyDataSetChanged();
с этим
listaDatos.setAdapter(miadaptador);
в вашем методе agregarProducto()
То же самое происходит, я могу добавлять новые продукты, находясь в действии ListView, но когда я пытаюсь добавить новый продукт из другого действия, он сбрасывается.
Вот так ваша реализация.
В представлении Sellador вы выбираете продукт. а затем он открывает представление ListaProductos.
Каждый раз, открывая представление ListaProductos, вы инициализируете пустой ArrayList<Producto> Lista и добавляете продукт, выбранный из представления Sellador.
По этой причине он показывает только один продукт, который вы недавно выбрали.
Куда мне поместить Lista = new ArrayList <Producto> (); если я не хочу, чтобы он создавал новый пустой список ArrayList каждый раз, когда я открываю представление ListaProductos?
попробуйте сохранить продукты в статическом ArrayList или в базе данных.
Каждый раз, когда вы добавляете новый продукт в свой Arraylist, он увеличивает длину? Или просто останется прежним?
Он остается прежним, это происходит, когда я пытаюсь добавить продукт за пределами представления списка продуктов, если я добавляю кнопку для добавления продукта внутри представления списка продуктов, я могу добавить более одного
Также укажите код адаптера