Я знаю, что есть решения для подобных проблем, но мой случай несколько сложнее.
У меня есть FoodMenuActivity
, который содержит RecyclerView
и Button
.RecyclerView
показывает меню и ElegantNumberButton
для выбора количества товара.Button
должен Intent
до SummaryActivity
и в то же время добавлять выбранные предметы и количества в Firestore.
Вот часть FoodMenuAdapter
:
public class FoodMenuAdapter extends FirestoreRecyclerAdapter<FoodMenu, FoodMenuAdapter.FoodMenuHolder> {
public String foodName;
public int foodQuantity;
public int price;
public int parentStoreId;
public int quantityPrice;
private static final String TAG = "FoodMenuAdapter";
private Map<String, Object> map = new HashMap<>();
public FoodMenuAdapter(@NonNull FirestoreRecyclerOptions options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull final FoodMenuHolder holder, final int position, @NonNull FoodMenu model) {
foodName = model.getFoodName();
price = model.getPrice();
parentStoreId = model.getParentStoreId();
holder.foodNameView.setText(foodName);
holder.priceView.setText("NT$"+String.valueOf(price));
holder.btnQuantity.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {
@Override
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue) {
foodQuantity = Integer.parseInt(holder.btnQuantity.getNumber());
quantityPrice = foodQuantity*price;
map.put("parentStoreId", parentStoreId);
map.put("foodName", foodName);
map.put("foodQuantity", foodQuantity);
}
});
}
}
FoodMenuActivity
public class FoodMenuActivity extends AppCompatActivity {
private static final String TAG = "FoodMenuActivity";
private String parentPath;
private String foodMenuPath = "menu";
private Button btnConfirm;
FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference foodMenuRef;
private FoodMenuAdapter foodMenuAdapter;
private ArrayList<HashMap<String,String>> listMap = new ArrayList<HashMap<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_menu);
btnConfirm = findViewById(R.id.btn_confirm);
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String foodName = foodMenuAdapter.foodName;
int foodQuantity = foodMenuAdapter.foodQuantity;
int price = foodMenuAdapter.price;
int parentStoreId = foodMenuAdapter.parentStoreId;
Toast.makeText(FoodMenuActivity.this, "foodName : "+foodName+" foodQuantity : "+foodQuantity, Toast.LENGTH_SHORT).show();
}
});
setUpRecyclerView();
}
}
activity_food_menu
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FoodMenuActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="68dp">
</android.support.v7.widget.RecyclerView>
<Button
android:id="@+id/btn_confirm"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="add to cart"/>
</android.support.design.widget.CoordinatorLayout>
food_menu_item
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/food_name_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Large"/>
<TextView
android:id="@+id/price_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/btn_quantity"
android:layout_centerVertical="true"/>
<com.cepheuen.elegantnumberbutton.view.ElegantNumberButton
android:id="@+id/btn_quantity"
android:layout_width="80dp"
android:layout_height="48dp"
android:layout_toLeftOf="@id/btn_add_to_cart"
android:layout_centerVertical="true"
app:initialNumber="0">
</com.cepheuen.elegantnumberbutton.view.ElegantNumberButton>
</RelativeLayout>
</android.support.v7.widget.CardView>
Мой инстинкт велел мне хранить данные в Map
, но японятия не имею как.Есть ли другой способ сохранить состояние элементов с ненулевым количеством?
Моя цель - когда btnConfirm
onClicked, приложение переходит на SummaryActivity
, который показывает все выбранные элементы с именами элементови количества.И добавьте эти данные к Firestore
одновременно.