<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/btnAccept"
app:layout_constraintTop_toBottomOf="@id/lnlStepper">
<FrameLayout
android:id="@+id/frameStep1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep3"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep4"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep5"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep6"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frameStep7"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ViewFlipper>
public class CreateDiscountFragment extends FragmentUtil<FragmentCreateDiscountBinding> {
private static final String SHOP_ID = "shopId";
private String shopId;
private Discount discount;
private Step1Fragment step1Fragment;
private Step2Fragment step2Fragment;
private Step3Fragment step3Fragment;
private Step4Fragment step4Fragment;
private Step5Fragment step5Fragment;
private Step6Fragment step6Fragment;
private Step7Fragment step7Fragment;
private StepperRepository repository;
private ProgressBarDialog progressBarDialog;
private FragmentCreateDiscountBinding binding;
private List<String> steps = Arrays.asList("customers", "barter", "condition", "selectable");
public CreateDiscountFragment() {
// Required empty public constructor
}
public static CreateDiscountFragment newInstance(String shopId) {
CreateDiscountFragment fragment = new CreateDiscountFragment();
Bundle args = new Bundle();
args.putString(SHOP_ID, shopId);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
repository = new StepperRepository();
if (getArguments() != null) {
shopId = getArguments().getString(SHOP_ID);
}
}
@Override
public FragmentCreateDiscountBinding onViewCreate(FragmentCreateDiscountBinding binding) {
this.binding = binding;
progressBarDialog = new ProgressBarDialog(activity);
binding.btnBck.setOnClickListener(v -> {
back();
});
step1Fragment = new Step1Fragment();
step2Fragment = new Step2Fragment();
step3Fragment = new Step3Fragment();
step4Fragment = new Step4Fragment();
step5Fragment = new Step5Fragment();
step6Fragment = new Step6Fragment();
step7Fragment = new Step7Fragment();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep1, step1Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep2, step2Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep3, step3Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep4, step4Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep5, step5Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep6, step6Fragment).commit();
getChildFragmentManager().beginTransaction().replace(R.id.frameStep7, step7Fragment).commit();
binding.btnAccept.setOnClickListener(v -> commit());
begin();
return binding;
}
@Override
public int getLayoutId() {
return R.layout.fragment_create_discount;
}
private void begin() {
if (!progressBarDialog.isShowing()) progressBarDialog.show();
repository.index(shopId, response -> activity.runOnUiThread(() -> {
if (progressBarDialog.isShowing()) progressBarDialog.dismiss();
if (response != null && response.getStep() > 0 && response.getStep() <= 7) {
discount = response;
} else {
discount = new Discount();
discount.setShop_id(shopId);
discount.setStep(1);
}
next();
}));
}
private void back(){
switch (discount.getStep()){
case 2:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(1);
break;
case 3:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(2);
break;
case 4:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(3);
break;
case 5:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(4);
break;
case 6:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(5);
break;
}
applyStep(discount.getStep());
}
private void next() {
switch (discount.getStep()) {
case 1:
step1Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(0);
break;
case 2:
step2Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(1);
break;
case 3:
step3Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(2);
break;
case 4:
step4Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(3);
break;
case 5:
step5Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(4);
break;
case 6:
step6Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(5);
break;
case 7:
step7Fragment.setDiscount(discount);
binding.flipper.setDisplayedChild(6);
break;
}
applyStep(discount.getStep());
}
private void commit() {
switch (discount.getStep()) {
case 1:
discount = step1Fragment.getDiscount();
break;
case 2:
discount = step2Fragment.getDiscount();
break;
case 3:
discount = step3Fragment.getDiscount();
break;
case 4:
discount = step4Fragment.getDiscount();
break;
case 5:
discount = step5Fragment.getDiscount();
break;
case 6:
discount = step6Fragment.getDiscount();
break;
case 7:
discount = step7Fragment.getDiscount();
break;
}
if (!progressBarDialog.isShowing()) progressBarDialog.show();
OnSuccess<Discount> successListener = response -> activity.runOnUiThread(() -> {
discount = response;
if (discount.getStep() == 7) {
finished();
return;
}
if (discount.getStep() == 4 && !steps.contains(response.getTarget())) {
discount.setStep(6);
} else if (discount.getStep() == 2 && discount.getType().equals("direct")) {
discount.setStep(4);
} else {
discount.setStep(discount.getStep() + 1);
}
next();
});
OnSuccess<ErrorHandler> failedListener = response -> activity.runOnUiThread(() -> {
switch (discount.getStep()) {
case 1:
step1Fragment.setErrors(response);
break;
case 2:
step2Fragment.setErrors(response);
break;
case 3:
step3Fragment.setErrors(response);
break;
case 4:
step4Fragment.setErrors(response);
break;
case 5:
step5Fragment.setErrors(response);
break;
case 6:
step6Fragment.setErrors(response);
break;
case 7:
step7Fragment.setErrors(response);
break;
}
});
OnSuccess<Boolean> finallyListener = response -> activity.runOnUiThread(() -> {
if (progressBarDialog.isShowing()) progressBarDialog.dismiss();
});
UploadRequest.UploadCallbacks uploadListener = percentage -> Log.e("UploadCallbacks", "percentage: " + percentage);
if (discount.getStep() == 1) {
if (discount.getCaption() == null ||
discount.getDiscount() == null ||
discount.getPrice_max() == null ||
discount.getFile() == null) {
Toast.makeText(activity, "ابتدا اطلاعات فرم را تکمیل کنید", Toast.LENGTH_LONG).show();
finallyListener.onSuccess(false);
return;
}
repository.step1(discount, successListener, failedListener, finallyListener, uploadListener);
} else
repository.store(discount, successListener, failedListener, finallyListener);
}
public void finished() {
Toast.makeText(activity, "درخواست صدور تخفیف با موفقت ارسال شد", Toast.LENGTH_LONG).show();
discount = new Discount();
discount.setShop_id(shopId);
discount.setStep(1);
next();
}
public void applyStep(int step) {
Drawable grayEa = ContextCompat.getDrawable(activity, R.drawable.circle_4a);
Drawable orange = ContextCompat.getDrawable(activity, R.drawable.circle_orange);
int orangeColor = ContextCompat.getColor(activity, R.color.colorAccent);
int grayColor = ContextCompat.getColor(activity, R.color._4a);
int dark = ContextCompat.getColor(activity, R.color._80);
int light = ContextCompat.getColor(activity, R.color.white);
if (step >= 1) {
binding.tvStep1.setTextColor(light);
binding.tvStep1.setBackground(orange);
} else {
binding.tvStep1.setTextColor(dark);
binding.tvStep1.setBackground(grayEa);
}
if (step >= 2) {
binding.tvStep2.setTextColor(light);
binding.tvStep2.setBackground(orange);
binding.viewStep1.setBackgroundColor(orangeColor);
} else {
binding.tvStep2.setTextColor(dark);
binding.tvStep2.setBackground(grayEa);
binding.viewStep1.setBackgroundColor(grayColor);
}
if (step >= 3) {
binding.tvStep3.setTextColor(light);
binding.tvStep3.setBackground(orange);
binding.viewStep2.setBackgroundColor(orangeColor);
} else {
binding.tvStep3.setTextColor(dark);
binding.tvStep3.setBackground(grayEa);
binding.viewStep2.setBackgroundColor(grayColor);
}
if (step >= 4) {
binding.tvStep4.setTextColor(light);
binding.tvStep4.setBackground(orange);
binding.viewStep3.setBackgroundColor(orangeColor);
} else {
binding.tvStep4.setTextColor(dark);
binding.tvStep4.setBackground(grayEa);
binding.viewStep3.setBackgroundColor(grayColor);
}
if (step >= 5) {
binding.tvStep5.setTextColor(light);
binding.tvStep5.setBackground(orange);
binding.viewStep4.setBackgroundColor(orangeColor);
} else {
binding.tvStep5.setTextColor(dark);
binding.tvStep5.setBackground(grayEa);
binding.viewStep4.setBackgroundColor(grayColor);
}
if (step >= 6) {
binding.tvStep6.setTextColor(light);
binding.tvStep6.setBackground(orange);
binding.viewStep5.setBackgroundColor(orangeColor);
} else {
binding.tvStep6.setTextColor(dark);
binding.tvStep6.setBackground(grayEa);
binding.viewStep5.setBackgroundColor(grayColor);
}
if (step >= 7) {
binding.tvStep7.setTextColor(light);
binding.tvStep7.setBackground(orange);
binding.viewStep6.setBackgroundColor(orangeColor);
} else {
binding.tvStep7.setTextColor(dark);
binding.tvStep7.setBackground(grayEa);
binding.viewStep6.setBackgroundColor(grayColor);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
}
Эй, у меня есть 7 фрагментов, и следующая кнопка работает хорошо, но BtnBck нет! Когда я нажимаю следующую кнопку, она переходит к следующему фрагменту, но ничего не происходит, когда я нажимаю кнопку «Назад». Я пробовал каждый метод в более старых темах, таких как popBackStack et c. но ни один из них не сработал. Я также написал метод, отозванный для него, но он не сработал. Я использую MVVM в своем проекте.