2017-01-05 3 views
0

У меня есть список «Корзина», в котором отображаются элементы, которые были нажаты из основного действия. У меня также есть список в моей mainactivity, отображает все элементы. Всякий раз, когда я нажимаю «Купить», элемент успешно отправляется в список «Корзина». то в моей работе с Карточкой у меня есть кнопка «ADD ITEMS», которая возвращается к MainActivity, чтобы добавить больше элементов. Если я снова нажимаю «Купить», выбранный элемент перезаписывает существующий элемент.добавление элементов в listview из другого вида деятельности

Я что-то упустил?

Вот мой Cart.class

public class Cart extends MainActivity { 

ListView cartList; 
CartCustomAdapter cartCustomAdapter; 
String name, price; 


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

    ArrayList<Order> cartArray = new ArrayList<Order>(); 

    Bundle bundle = getIntent().getExtras(); 

    Button checkout = (Button) findViewById(R.id.check_out); 
    Button add_item = (Button) findViewById(R.id.add_item); 

    name = bundle.getString("i_name"); 
    price = bundle.getString("i_price"); 

    add_item.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Cart.this,MainActivity.class); 
      startActivity(intent); 

     } 
    }); 

    cartArray.add(new Order(name,price,"1")); 

    cartCustomAdapter = new CartCustomAdapter(Cart.this,R.layout.list_cart,cartArray); 
    cartList = (ListView) findViewById(R.id.cart_list); 
    cartList.setItemsCanFocus(false); 
    cartList.setAdapter(cartCustomAdapter); 
    cartCustomAdapter.notifyDataSetChanged(); 


} 

}

+0

Почему вы подклассифицируете MainActivity? – Srijith

+0

Я хочу, чтобы мой cart.class имел ту же самую панель инструментов. –

+0

Возможно, вы могли использовать одно действие и два фрагмента. – Srijith

ответ

0

сделать CartArray статическим и поле экземпляра, поэтому он создается один раз, даже если вы должны использовать базу данных sqlite вместо этого, чтобы действительно сохранять такие структурированные данные. Удалить ArrayList cartArray = новый ArrayList(); из вашей операции onCreate.

public class Cart extends MainActivity { 

ListView cartList; 
CartCustomAdapter cartCustomAdapter; 
String name, price; 
static ArrayList<Order> cartArray = new ArrayList<Order>(); 

} 
+0

Работал сэр !. Спасибо. можете ли вы объяснить немного больше о цели «статического» в создании экземпляра ArrayList. –

+0

Я знаю, тогда вам понадобятся некоторые основы объектно-ориентированного программирования. Статическая переменная - это своего рода глобальная переменная, как и в других процедурных языках, то есть когда вы создаете объекты этого класса, тогда все объекты будут ссылаться на эту переменную или переменная будет разделяться между этими объектами. – xFighter

0
ArrayList<Order> cartArray = new ArrayList<Order>(); 

Вы создаете новый (пусто) ArrayList каждый раз. Вы должны просто взять ArrayList, который уже находится в вашей Cart-Thing, и добавить к нему новую покупку.

0

ArrayList cartArray = new ArrayList();

Вы создаете новый arraylist каждый раз, когда вы переходите к Activity Activity, вот почему в arraylist добавляется только один элемент. Вы должны сохраняться старый список и добавить новый элемент в списке корзины, так что вам нужно сделать следующее:

  1. ArrayList cartArray = новый ArrayList(); удалите эту строку.

  2. Сохраните элементы, уже добавленные в корзину где-нибудь, чтобы вы могли их отображать и отображать при необходимости. Вы можете сделать одиночный или локальный БД в соответствии с требованиями вашего проекта.

+0

точно, что я сказал 0.o – creativecreatorormaybenot

+0

да;) @creativecreatorormaybenot –

0

Вот как вы можете обновить ArrayList:

Вызовите MainActivity с помощью startActivityForResult. Когда вы нажимаете Buy on MainActivity, вы отправляете выбранные элементы обратно в корзину. В деятельности «Корзина» вы можете получить элементы, внедрив метод onActivityResult и обновить список.

Для получения дополнительной информации: https://developer.android.com/training/basics/intents/result.html

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

Смежные вопросы