gpt4 book ai didi

android - OnBackPress() - 使用 ZBarScannerView 时 Activity 为空白

转载 作者:行者123 更新时间:2023-11-29 23:31:20 28 4
gpt4 key购买 nike

我已经使用 ZBarScannerView 在我的应用程序中实现了条码扫描器功能。

我有一个包含多个 fragment 的 Activity ,在一个 fragment 上我有一个扫描按钮。通过单击该按钮,我跳转到我已实现 ZBarScannerView 代码的扫描 Activity 。

当我从扫描 Activity 中获得条形码时,我将其跳回到包含条形码点击按钮的 fragment 。然后,如果我从该 fragment 按回,它会显示空白屏幕。我该怎么办?

请回复

ScanActivity 代码:

    public class ScanActivity extends AppCompatActivity implements ZBarScannerView.ResultHandler {
private ZBarScannerView mScannerView;
private static final int REQUEST_CAMERA = 1;
ArrayList<ModelProductDetail> modelProductArticleCodeList;
DatabaseHelper databaseHelper;
String article_code;

ArrayList<ModelUnrecognisedCode> modelUnrecognisedCodeArrayList;
ArrayList<ModelUnrecognisedCode> singleUnrecognisedCheck;

//camera permission is needed.

@Override
public void onCreate(Bundle state) {
super.onCreate(state);

databaseHelper = new DatabaseHelper(this);
checkUserPermission();

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (mScannerView == null) {
mScannerView = new ZBarScannerView(this); // Programmatically initialize the scanner view
setContentView(mScannerView);
}
} else {
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
checkUserPermission();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

}

}

private void checkUserPermission() {
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1);
return;
}
}
loadImage();
}

private void loadImage() {
if (mScannerView == null) {
mScannerView = new ZBarScannerView(this); // Programmatically initialize the scanner view
setContentView(mScannerView);
}
}


@Override
public void onResume() {
super.onResume();

if (mScannerView instanceof ZBarScannerView) {
mScannerView.startCamera();
mScannerView.setResultHandler(this);
// Stop camera on pause
}
}

@Override
public void onDestroy() {
super.onDestroy();

if (mScannerView instanceof ZBarScannerView) {
mScannerView.stopCamera(); // Stop camera on pause
}
}

@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, "Unrecognised code has already been added.", Toast.LENGTH_SHORT).show();
}


} else {

// for (ModelProductDetail modelProductDetail : modelProductArticleCodeList) {
// article_code = modelProductDetail.getArticle_code();
// }

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);

}
}

public void changeFragments(Fragment fragment) {
FragmentTransaction transaction = this.getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame, fragment);
transaction.addToBackStack(null);
transaction.commit();
}


private void getDialog() {

final Dialog d = new Dialog(this);
d.setContentView(R.layout.dialog_unrecognised_code);
d.setCanceledOnTouchOutside(true);
d.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

final EditText etCode = (EditText) d.findViewById(R.id.etCode);
final EditText etrecognisedComment = (EditText) d.findViewById(R.id.etrecognisedComment);
ImageView imgClose = (ImageView) d.findViewById(R.id.imgClose);
ImageButton ibSubmit = (ImageButton) d.findViewById(R.id.ibSubmit);

imgClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
d.dismiss();
}
});


ibSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {


ModelUnrecognisedCode modelUnrecognisedCode = new ModelUnrecognisedCode();
modelUnrecognisedCode.setUnrecognised_code(etCode.getText().toString());
modelUnrecognisedCode.setUnrecognised_comment(etrecognisedComment.getText().toString());

databaseHelper.addUnrecognisedCode(modelUnrecognisedCode);

// changeFragments(new SearchProductFragment());

modelUnrecognisedCodeArrayList = new ArrayList<>();
modelUnrecognisedCodeArrayList = databaseHelper.getUnrecognisedCode();
Log.e("TAG", "unrecognised code: " + modelUnrecognisedCodeArrayList.size());

d.dismiss();

}
});


d.show();


}


}

最佳答案

我假设在成功扫描条形码后,您正在获取产品数据,如果找到数据,那么您正在更换屏幕。所以用这个改变你的 else 语句,看看它是否有效

else {
Intent in = new Intent(this, ContainAllFragmentsActivity.class);
in.putExtra("product_art", resultCode);
in.putExtra("source_type", "art");
in.putExtra("jump", "2");
startActivity(in);
finish();
}

关于android - OnBackPress() - 使用 ZBarScannerView 时 Activity 为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624300/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com