2015-04-22 52 views
1

我试图从片段致电ZXingScannerActivity调用startActivityForResult时得到错误的片段

NewInventoryFragement.java

package info.androidhive.wolf; 

import android.app.Fragment; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import info.androidhive.wolf.qrcode.ZXingScannerActivity; 
import info.androidhive.wolf.qrcode.ZXingConstants; 
import com.google.zxing.BarcodeFormat; 

/** 
* Created by Admin on 4/22/2015. 
*/ 
public class NewInventoryFragment extends Fragment{ 

    private static final int ZXING_SCANNER_REQUEST = 0; 
    private static final int ZXING_QR_SCANNER_REQUEST = 1; 
    Button button; 
    public NewInventoryFragment(){}; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.new_inventory_fragment, container, false); 

     button=(Button) rootView.findViewById(R.id.button2); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       launchQRScanner(view); 
      } 
     }); 
     return rootView; 
    } 

    public void launchQRScanner(View v) { 
     if (isCameraAvailable()) { 
      Intent intent = new Intent(getActivity().getApplicationContext(), ZXingScannerActivity.class); 
      intent.putExtra(ZXingConstants.SCAN_FORMATS, BarcodeFormat.QR_CODE.toString()); 
      getActivity().startActivityForResult(intent, ZXING_SCANNER_REQUEST); 
     } else { 
      Toast.makeText(getActivity().getApplicationContext(), "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public boolean isCameraAvailable() { 
     PackageManager pm = getActivity().getPackageManager(); 
     return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 



    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case ZXING_SCANNER_REQUEST: 
      case ZXING_QR_SCANNER_REQUEST: 
       if (resultCode == 1) { 
        Toast.makeText(getActivity().getApplicationContext(), "Scan Result = " + data.getStringExtra(ZXingConstants.SCAN_RESULT) + 
          ", Scan Format = " + data.getStringExtra(ZXingConstants.SCAN_RESULT_FORMAT), Toast.LENGTH_SHORT).show(); 

        } 
       break; 
     } 
    } 

} 

logcat的说

26260-26260/info.androidhive.slidingmenu E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    android.content.ActivityNotFoundException: Unable to find explicit activity class {info.androidhive.slidingmenu/info.androidhive.wolf.qrcode.ZXingScannerActivity}; have you declared this activity in your AndroidManifest.xml? 
      at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1556) 
      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1530) 
      at android.app.Activity.startActivityFromFragment(Activity.java:3922) 
      at android.app.Fragment.startActivityForResult(Fragment.java:1025) 
      at android.app.Fragment.startActivityForResult(Fragment.java:1009) 
      at info.androidhive.wolf.NewInventoryFragment.launchQRScanner(NewInventoryFragment.java:46) 
      at info.androidhive.wolf.NewInventoryFragment$1.onClick(NewInventoryFragment.java:36) 
      at android.view.View.performClick(View.java:4222) 
      at android.view.View$PerformClick.run(View.java:17343) 
      at android.os.Handler.handleCallback(Handler.java:615) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4895) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
      at dalvik.system.NativeStart.main(Native Method) 

@line#46 getActivity ().startActivityForResult(intent,ZXING_SCANNER_REQUEST); 我从Stack

引用这个我已经在增值活动的Manifest.xml

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="info.androidhive.wolf.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name="info.androidhive.wolf.qrcode.ZXingScannerActivity" 
      android:screenOrientation="landscape" 
      android:label="@string/app_name" 
      /> 


    </application> 

其实我在这里做的是MainActivity.java是延伸活性,并且具有导航抽屉多个片段来导航。

库存是带有添加新库存的按钮的片段之一意味着导航到NewInventoryFragment。

具有此@line#46的NewInventoryFragment getActivity()。startActivityForResult(intent,ZXING_SCANNER_REQUEST);

是否正确的做法?

+0

它不相关,但不使用'getActivity()。'开始活动,否则你的片段中的onActivityResult将不会被调用 – Blackbelt

+1

'info.androidhive.slidingmenu'包在哪里? –

+1

您的ZXingScannerActivity.class完全位于哪个包? 我认为Activity类的完整路径存在一些问题。 您的项目中是否有两个具有该名称的课程? – Arnab

回答

1

您无法在Fragment上处理此事件,因为它是从其自己的活动处理的。

我的意思是,片段没有上下文,因为是活动的一部分。有些事件只能在上下文中处理,因此,必须在包含该片段的活动内部编写这种类型的方法。

+0

感谢您的回复@Alejandro Lora有没有办法实现具有多个活动的导航抽屉总是在所有活动中显示抽屉 –

+0

不,当然,当您实施导航抽屉时,几个片段,但您可以在所有地方看到导航抽屉,因为您正在使用相同的活动。 –

+1

好的,那我该如何从片段开始活动@Alejandro Lora –