Сохраните элементы в моем ArrayList (добавление продолжает заменять первый)

Я пытаюсь создать приложение, которое показывает сотруднику магазина, что нужно делать, чтобы помочь покупателю. Он показывает вопросы, которые сотрудник должен задать, чтобы понять, что нужно клиенту.

Проблема в том, что когда я пытаюсь выбрать продукт, я добавляю его в 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;
    }
}

Также укажите код адаптера

user1504495 21.07.2018 00:15

А еще лучше - минимальный воспроизводимый пример.

khelwood 21.07.2018 00:23

Я отредактировал вопрос и добавил код адаптера внизу, спасибо! Я постараюсь создать минимальную версию того, что я пытаюсь сделать.

Oscar Lopez 21.07.2018 00:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
49
3

Ответы 3

Попробуйте заменить эту строку

miadaptador.notifyDataSetChanged();

с этим

listaDatos.setAdapter(miadaptador);

в вашем методе agregarProducto()

То же самое происходит, я могу добавлять новые продукты, находясь в действии ListView, но когда я пытаюсь добавить новый продукт из другого действия, он сбрасывается.

Oscar Lopez 21.07.2018 01:37

Вот так ваша реализация.

В представлении Sellador вы выбираете продукт. а затем он открывает представление ListaProductos.

Каждый раз, открывая представление ListaProductos, вы инициализируете пустой ArrayList<Producto> Lista и добавляете продукт, выбранный из представления Sellador.

По этой причине он показывает только один продукт, который вы недавно выбрали.

Куда мне поместить Lista = new ArrayList <Producto> (); если я не хочу, чтобы он создавал новый пустой список ArrayList каждый раз, когда я открываю представление ListaProductos?

Oscar Lopez 21.07.2018 01:56

попробуйте сохранить продукты в статическом ArrayList или в базе данных.

Yuchao Zhou 24.07.2018 00:57

Каждый раз, когда вы добавляете новый продукт в свой Arraylist, он увеличивает длину? Или просто останется прежним?

Он остается прежним, это происходит, когда я пытаюсь добавить продукт за пределами представления списка продуктов, если я добавляю кнопку для добавления продукта внутри представления списка продуктов, я могу добавить более одного

Oscar Lopez 21.07.2018 05:52

Другие вопросы по теме