0

I have two activities in my application. One activity is simple having no fragments and one is parent activity having multiple fragments. On one fragment I have one button and upon clicking that button app switches to next activity. Now I perform some task in second activity and switch back to that current fragment but it crashes as no view found for fragment. I tried various solution but not able to resolve it. Please Help!!

Code to switch from second activity to fragment:

 SearchProductFragment fragment = new SearchProductFragment();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.frame, fragment);
            transaction.commit();

Code of Fragment to go to second activity :

 Intent in = new Intent(getActivity(), ScanActivity.class);
        startActivity(in);

And Second Activity Code :

 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;

    private static FragmentManager fragmentManager;

    //camera permission is needed.

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

        databaseHelper = new DatabaseHelper(this);

        fragmentManager = getSupportFragmentManager();//Get Fragment Manager
        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, R.string.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 onPause() {
        super.onPause();

        if (mScannerView instanceof ZBarScannerView) {
            mScannerView.stopCamera();           // 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);


            } else {

                Toast.makeText(this, R.string.unrecognised_code_has_been_added, Toast.LENGTH_SHORT).show();
                Intent in = new Intent(this, ContainAllFragmentsActivity.class);
                in.putExtra("jump", "3");
                in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(in);



                }


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

        }


        mScannerView.resumeCameraPreview(this);
    }

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


    }


}
mishti
  • 183
  • 7
  • 20
  • https://stackoverflow.com/questions/25665642/java-lang-illegalargumentexception-no-view-found-for-id-0x1020002-androidid-c – AskNilesh Oct 05 '18 at 07:24
  • 1
    Poste at least the onClick() onCreate from both Activities... – Skizo-ozᴉʞS ツ Oct 05 '18 at 07:25
  • 1
    post activity codes also – dev Oct 05 '18 at 07:29
  • Check my updated post. – mishti Oct 05 '18 at 08:50
  • @NileshRathod Tanx a lot. It works but problem is it overlaps the fragment as I am able to see both fragment and activity layout on single page. I have added finish() but i get this problem for 2-3 seconds. Please tell me how can I remov it. SearchProductFragment fragment = new SearchProductFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, fragment); transaction.addToBackStack(null); transaction.commit(); finish(); – mishti Oct 05 '18 at 09:43
  • @mishti welcome check this https://stackoverflow.com/questions/18274732/android-fragments-overlapping-issue – AskNilesh Oct 05 '18 at 09:44
  • @NileshRathod I am not able to understand. Can you please clarify. – mishti Oct 05 '18 at 09:48
  • @mishti just set background color to your fragment rootlayout it will work – AskNilesh Oct 05 '18 at 09:50
  • @NileshRathod adding android:background="@android:color/white" blinks the fragment two times – mishti Oct 05 '18 at 10:07
  • @mishti can u explain your the sistuation when your fragment is overlapping? – AskNilesh Oct 05 '18 at 10:12
  • @mishti and also check this https://stackoverflow.com/questions/15922604/fragments-overlapping-each-other – AskNilesh Oct 05 '18 at 10:12
  • @NileshRathod I am using barcode scanner in second activity and when I got barcode I use SearchProductFragment fragment = new SearchProductFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, fragment); transaction.addToBackStack(null); transaction.commit(); finish(); to go back to previous fragment but for a while I am able to see both layout on single page after that it finishes second activity and resume the fragment – mishti Oct 05 '18 at 10:27

0 Answers0