Вызов общей суммы из корзины до foodlistactivity

Как я могу вызвать строковые итоги из getOrderItemData(), который находится в CartActivity, в FoodListActivity.

Я хочу назвать итоги и поместить их в str_amount, который находится в FoodListActivityplaceOrder().

CartActivity - это действие, вызываемое из FoodListActivity, которое устанавливает корзину. Когда вы нажимаете кнопку размещения заказа, он распечатывает выбранный продукт с общей суммой, рассчитанной в CartActivity.

Корзина

   public void getOrderItemData() {
    Bundle extras = getIntent().getExtras();
    if (extras !=null )
    {
        String orderItems = extras.getString("orderItems",null);
        if (orderItems!=null && orderItems.length()>0)
        {
            try{
                JSONArray jsonOrderItems = new JSONArray(orderItems);
                for(int i=0;i<jsonOrderItems.length();i++)
                {
                    JSONObject jsonObject = new JSONObject(jsonOrderItems.getString(i));
                    Food food = new Food(
                            jsonObject.getString("FoodName"),
                            jsonObject.getDouble("FoodPrice")
                   );
                  food.cartQuantity = jsonObject.getInt("CartQuantity");
                    /* Calculate Total*/

                    Total =Total + (food.cartQuantity* food.foodprice);
                    totals=String.valueOf(Total);
                    Orders.add(food);

                }

                if (Orders.size() > 0)
                {
                  CustomAdapter listAdapter = new CustomAdapter(this,Orders);
                    lvSummary.setAdapter(listAdapter);
                     tvTotal.setText("Order Total:RM "+ totals);
                }
                else
                {
                    showMessage("Empty");
                }

            }
            catch (Exception e)
            {
                showMessage(e.toString());
            }
        }
    }

}

FoodListActivity

 public void placeOrder()
{
    Orders.clear();
    lOrderItems.clear();
   for(int i=0;i<listAdapter.strilists.size();i++)
    {
        if (listAdapter.strilists.get(i).cartQuantity > 0)
       {
           Food foods = new Food(
                   listAdapter.strilists.get(i).foodname,
                   listAdapter.strilists.get(i).foodprice
                         );
                        foods.cartQuantity = listAdapter.strilists.get(i).cartQuantity;
                       Orders.add(foods);
           lOrderItems.add(foods.getJsonObject().toString());

                        }

        }
        User user = SharedPrefManager.getInstance(this).getUser();
        String str_id=String.valueOf(user.getId());
        String str_pickuptime=String.valueOf(String.valueOf(ettime.getText()));
        String str_pickupdate=String.valueOf(date);

        String str_amount=String.valueOf();
        String type = "order";
        BackgroundWorker backgroundWorker=new BackgroundWorker(this);
        backgroundWorker.execute(type,str_id,str_pickuptime,str_pickupdate,str_amount);
       JSONArray jsonArray = new JSONArray(lOrderItems);
         openSummary(jsonArray.toString());

       }

попробуйте сохранить его в SharedPreference. тогда вам не нужно будет беспокоиться о состоянии любого из Activity. developer.android.com/reference/android/preference/Preferenc‌ e

Angel Koh 29.04.2018 06:55
1
1
42
2

Ответы 2

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

Пример:

FoodListActivity - определить как:

public class FoodListActivity extends AppCompatActivity {

    public static double cartTotal;
    ...
}

Корзина - звонить откуда угодно:

double cartTotal = FoodListActivity.cartTotal;

Пока вы не убиваете FoodListActivity, ваша переменная cartTotal доступна.

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

Jacky 29.04.2018 07:49

First way:-

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

Например, ниже,

public class FoodListActivity extends Activity {

    public static yourdatatype total; //datatype - like int,double or float what you require

}

public class CartActivity extends Activity {

    yourdatatype total = FoodListActivity.total;

}

//you can also use this variable in any other activity also.

Second way:-

Вы также можете создать baseActivity в качестве основы для всей деятельности. Это хорошо для более сложного и большого количества кода.

public class BaseActivity extends AppCompactActivity {

        public static yourdatatype total; //datatype - like int,double or float

    }

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

нравиться:-

public class CartActivity extends BaseActivity {

        yourdatatype gettotal = total//datatype - total get from base activity.

    }

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