2016-10-10 1 views
0

Dies ist mein Code Barcode und stellen Inhalte Textview zu scannen:Textview nicht setText auf onActivityResult Fragmente

public class scanCodeFragment extends android.support.v4.app.Fragment implements View.OnClickListener{ 

    Button btnScan; 
    TextView contentTxt; 
    String substrCode, scanContent; 
    View v; 

    public scanCodeFragment(){ 
    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    v = inflater.inflate(R.layout.fragment_scan_code, container, false); 
    btnScan = (Button) v.findViewById(R.id.btnScan); 
    contentTxt = (TextView) v.findViewById(R.id.scan_content); 

    btnScan.setOnClickListener(this); 

    return v; 
    } 

    public void onClick(View v){ 
    if (v.getId() == R.id.btnScan){ 
     IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity()); 
     scanIntegrator.initiateScan(); 
    } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
    if (scanningResult != null) { 
     scanContent = scanningResult.getContents(); 
     substrCode = scanContent.substring(2, 10); 
     contentTxt.setText("NIS: " + substrCode); 
    } 
    else { 
     Toast toast = Toast.makeText(getActivity(), "Kode barcode salah", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
    } 
} 

In onActivityResult Methode, ich nicht das Ergebnis bekommen kann nach dem Barcode-Code scannen. Vor diesem Codefragment kann ich das Ergebnis von onActivityResult erhalten.

+0

genannt Wo hast du 'startActivityForResult()' nennen? –

+0

Ich rufe nicht startActivityForResult(). Wo muss ich startActivityForResult() aufrufen? –

+0

lesen Sie mehr https://developer.android.com/training/basics/intents/result.html –

Antwort

0

Versuchen Sie, diese Linie zu ändern IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity()); zu diesem IntentIntegrator scanIntegrator = new IntentIntegrator(this);.

Der Grund, dass, wenn Sie eine Aktion als Parameter innerhalb IntentIntegrator dann auf initiateScan passieren activity.startActivityForResult(intent, code) genannt werden - so führt nicht zu Fragment übergeben werden (versuchen, für Eltern Aktivität zu überprüfen onActivityResult, wird es genannt werden). Aber wenn Sie Fragment als Parameter in IntentIntegrator übergeben - wird fragment.startActivityForResult(intent, code) genannt, so Android Framework in der Lage sein wird, onActivityResult in Ihrem Fragment für das Ergebnis aufrufen.

0

ich weiß nicht, was Ihr initiateScan() es so halten, wenn Sie es

final int requestCode = 100; 

public void onClick(View v){ 
    if (v.getId() == R.id.btnScan){ 
     IntentIntegrator intent = new IntentIntegrator(getContext(), MainActivity.class); 
      intent.putExtra(RECIPE_EXTRA, extraObject); 
      startActivityForResult(intent, requestCode); 
    } 
} 
0

aus dem Code-Snippet benötigen Sie zur Verfügung gestellt haben, empfehle ich Ihnen einen separaten Activity für das Scannen zu erstellen, statt ein Class Datei, in Ihrem Fall, die IntentIntegrator ist, und starten Sie es, wenn Ihr Scan Button angeklickt wird.

Also, erstellen IntentIntegratorActivity und starten Sie es so.

public void onClick(View v){ 
    if (v.getId() == R.id.btnScan){ 
     IntentIntegratorActivity intent = new Intent(getActivity(), IntentIntegratorActivity.class); 
     startActivityForResult(intent, SCAN_INTENT_CODE);//Remember this code, which is an Integer value 
    } 
} 

dann in OnCreate Methode der IntentIntegratorActivity, tun das Scannen und geben die Abtastdaten über eine Intent.

Intent returnIntent = new Intent(); 
returnIntent.putExtra("SCAN_DATA_KEY", scanData);//Send scan data from here and remember the key SCAN_DATA_KEY 
setResult(RESULT_OK, returnIntent); 
finish(); 

Dann diese Daten sollten innerhalb onActivityResult Methode in der FragmentClass gefangen werden.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
     case ConstList.SCAN_INTENT_CODE: 
     String scanData = data.getStringExtra("SCAN_DATA_KEY");//Use this key to get the data. 
     //I have assumed that the data is String 
     contentTxt.setText("NIS: " + scanData);//Set data to the Text field 
     break;  
    } 
} 
+0

Was bedeutet SCAN_INTENT_CODE? –

+0

@NaufalPrakoso SCAN_INTENT_CODE ist eine Integer-Variable zwischen 0 und 255. Sie müssen definieren und sicherstellen, dass sie 256 nicht überschreitet. – vidulaJ

0

onActivityResult() nur aufgerufen, wenn Sie startActivityForResult() aufrufen

Ich nenne die startActivityForResult() in Fragment und das onActivityResult in Fragment implementieren, die onActivityResult() korrekt bezeichnet werden.

Sie können nicht startActivityForResult() in Tätigkeit nennen, da sonst die onActivityResult() in Fragment wird nicht

Verwandte Themen