Я включил сканер штрих-кода в моем приложении.У меня есть активность, которая содержит несколько фрагментов.В одном фрагменте у меня есть кнопка сканирования штрих-кода, и при нажатии этой кнопки она переходит к операции сканирования для сканирования кода и возвращается к фрагменту с кодом.
Но проблема заключается в том, что когда я получаю, то открываетдиалоговое окно с предыдущим фрагментом с кодом, и когда я нажимаю на кнопку назад на панели инструментов из этого текущего фрагмента, отображается белая пустая активность.
@Override
public void handleResult(me.dm7.barcodescanner.zbar.Result result) {
String resultCode = result.getContents();
Log.e("TAG", "handleResult: " + resultCode);
mScannerView.stopCamera();
modelProductArticleCodeList = new ArrayList<>();
modelProductArticleCodeList = databaseHelper.getProductByArtCode(resultCode);
if (modelProductArticleCodeList.size() == 0) {
Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(getApplicationContext().VIBRATOR_SERVICE);
vibrator.vibrate(1000);
singleUnrecognisedCheck = new ArrayList<>();
singleUnrecognisedCheck = databaseHelper.getUnrecognisedByCode(resultCode);
if (singleUnrecognisedCheck.size() == 0) {
Intent in = new Intent(this, ContainAllFragmentsActivity.class);
in.putExtra("unrecognised_alert", true);
in.putExtra("unrecognised_code", resultCode);
in.putExtra("jump", "1");
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finishAffinity();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
// Toast.makeText(this, "not matched code", Toast.LENGTH_SHORT).show();
} else {
Intent in = new Intent(this, ContainAllFragmentsActivity.class);
in.putExtra("jump", "3");
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finishAffinity();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Toast.makeText(this, R.string.unrecognised_code_has_been_added, Toast.LENGTH_SHORT).show();
}
} else {
}
Intent in = new Intent(this, ContainAllFragmentsActivity.class);
in.putExtra("product_art", resultCode);
in.putExtra("source_type", "art");
in.putExtra("jump", "2");
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finishAffinity();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
}
И в зависимости от ключевых параметров и значения в намеренной операции переключается на конкретный фрагмент.
if (switchTonext.equals("1")) {
Fragment fragment = new SearchProductFragment();
FragmentManager fragmentManager = getSupportFragmentManager(); // this is basically context of the class
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putBoolean("unrecognised_alert", unrecognised_alert);
bundle.putString("unrecognised_code", getIntent().getStringExtra("unrecognised_code"));
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
Чтобы решить эту проблему, я сделал некоторые изменения в onBackPressed в активности и жестко запрограммировал, что если фрагмент является экземпляром этого текущего фрагмента, то при нажатии кнопки «назад» переход к предыдущему.
@Override
public void onBackPressed() {
Fragment f = getSupportFragmentManager().findFragmentById(R.id.frame);
if (!(f instanceof SearchShopFragment)) {
if (f instanceof SearchProductFragment) {
changeFragments(new SearchShopFragment());
}
else if(f instanceof ProductDetailFragment){
changeFragments(new SearchProductFragment());
}
else {
super.onBackPressed();
}
} else {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setMessage(R.string.exit_msg);
alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
finish();
}
});
alertDialog.setNegativeButton(R.string.no
, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
Это позволяет удалить пустое действие, но теперь все мои данные во фрагменте исчезают, когда я нажимаю кнопку возврата.У меня нет фрагментов данных, когда я нажимаю кнопку возврата.
Пожалуйста, помогите !!Как я могу решить эти две проблемы.