Saturday 16 November 2013

Android : Zxing onActivityResult called only in Activity - How to show it in the Fragment - tutorial


In this example I'm showing how to send data from Activity to Fragment.
With app Zxing  via Intent we read the Barcode and that we represent it in the main Fragment. The Zxing app call onActivityResult() in Activity not in Fragment.


package com.example.testingcodereading;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

public class MainActivity extends FragmentActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragment);

    FragmentManager fm = getSupportFragmentManager();
    Fragment f = fm.findFragmentById(R.id.fragmentContainer);

    if (f == null) {
      f = MainFragment.newInstance("Start Application");
      fm.beginTransaction().add(R.id.fragmentContainer, f).commit();
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode,
      Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    System.out.println("the code is catch");

    IntentResult scanResult = IntentIntegrator.parseActivityResult(
        requestCode, resultCode, intent);
    // handle scan result
    if (scanResult != null) {
      FragmentManager fm = getSupportFragmentManager();

      Fragment newFrame = MainFragment.newInstance(scanResult.toString());

      fm.beginTransaction().replace(R.id.fragmentContainer, newFrame).commit();
    }

  }

}

package com.example.testingcodereading;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.test.suitebuilder.annotation.MediumTest;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MainFragment extends Fragment {

  private static final String EXTRA_CODE = "com.example.testingcodereading.code";
  private Button mButtonXZing;
  private TextView mTextView;

  public static MainFragment newInstance(String code) {
    Bundle args = new Bundle();
    args.putSerializable(EXTRA_CODE, code);

    MainFragment fragment = new MainFragment();
    fragment.setArguments(args);

    return fragment;
  }


  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.fragment_main, parent, false);

    mTextView = (TextView) v.findViewById(R.id.text_code);
    mTextView.setText((String) getArguments().getSerializable(EXTRA_CODE));

    mButtonXZing = (Button) v.findViewById(R.id.button_xzing);
    mButtonXZing.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

        IntentIntegrator integrator = new IntentIntegrator(getActivity());
        integrator.initiateScan();
      }
    });

    return v;
  }


  @Override 
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    System.out.println("never here");
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (scanResult != null) {
      // handle scan result
    }
    // else continue with any other code you need in the method
  }
}

2 comments:

  1. what is com.example.testingcodereading.code?

    ReplyDelete
  2. its not working. What's com.example.testingcodereading.code?

    ReplyDelete