【问题标题】:Getting error after calling fragment from the activity从活动中调用片段后出现错误
【发布时间】:2015-12-31 06:09:44
【问题描述】:

从 Activity 调用 Fragment 时出现错误,我想使用 Activity 扫描条形码和扫描的内容需要进入 Fragment。 我的“PublicBarcodeScannerActivity.java”是 =>

    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.support.v4.app.FragmentActivity;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    import com.google.zxing.integration.android.IntentIntegrator;
    import com.google.zxing.integration.android.IntentResult;
    import com.example.delivery.R;
    import com.example.delivery.adapter.OrderedItemListAdapter;
    import static android.R.id.content;
    public class PublicBarcodeScannerActivity extends FragmentActivity {
        String actvity;
        String ordid;
        SharedPreferences pref;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_public_barcode_scanner);
            Bundle b = getIntent().getExtras();
            actvity = b.getString("act");
            ordid = b.getString("orderid");
            Log.e("activty:", actvity);
            IntentIntegrator scanIntegrator = new IntentIntegrator(
                    PublicBarcodeScannerActivity.this);
            // start scanning
            scanIntegrator.initiateScan();
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_public_barcode_scanner, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            // retrieve result of scanning - instantiate ZXing object
            IntentResult scanningResult = IntentIntegrator.parseActivityResult(
                    requestCode, resultCode, intent);
            if (scanningResult != null) {
                // get content from Intent Result
                String scanContent = scanningResult.getContents();
                if (scanContent != null) {
                    // get format name of data scanned
                    String scanFormat = scanningResult.getFormatName();

                    Log.d("scanFormat", scanFormat);
                    Log.d("scanContent", scanContent);


                    if (actvity.equals("FragOrdrdItemList")) {
                        Bundle bundle = new Bundle();
                        Log.e("orderIDB:", ordid);
                        bundle.putString("scancode", scanContent);
                        bundle.putString("ACTIVITY", "publicbarcode");
                        bundle.putString("orderid", ordid);
                        OrderedItemListFragment orderedItemListFragment = new OrderedItemListFragment();
                        //OrderedItemListFragment odl=OrderedItemListFragment.newInstance();
                        orderedItemListFragment.setArguments(bundle);

                        FragmentTransaction ft = getFragmentManager().beginTransaction();
    //                    FragmentManager mgr = getFragmentManager();
    //                    mgr.popBackStack();
                        // ft.addToBackStack(null);

                        ft.replace(R.id.container_body, orderedItemListFragment); 
                       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                        ft.commit();
      }

                } else {
                    if (actvity.equals("FragOrdrdItemList")) {

                        OrderedItemListFragment orderedItemListFragment = new OrderedItemListFragment();
                        Bundle bundle = new Bundle();
                        Log.e("scancode4", scanContent);
                        bundle.putString("scancode", "null");
                        bundle.putString("ACTIVITY", "publicbarcode");
                        bundle.putString("orderid", ordid);
                        Log.e("scancode5", scanContent);
                        orderedItemListFragment.setArguments(bundle);
                        FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.addToBackStack(null);
                        ft.replace(R.layout.activity_main, orderedItemListFragment); // f2_container is your FrameLayout container
                        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                        ft.commit();
                        Log.e("scancode6", scanContent);
                    }
                }

            } else {
                // invalid scan data or scan canceled
                Toast toast = Toast.makeText(getApplicationContext(),
                        "No scan data received!", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }

我的 Logcat 显示以下错误 =>

        12-31 11:15:26.928  17452-17452/com.example.delivery E/activty:﹕ FragOrdrdItemList
        12-31 11:15:48.218  17452-17452/com.example.delivery E/orderIDB:﹕ 10776
        12-31 11:15:48.218  17452-17452/com.example.delivery E/FragmentManager﹕ No view found for id 0x7f0e0079 (com.example.delivery:id/container_body) for fragment OrderedItemListFragment{42b552d0 #0 id=0x7f0e0079}
        12-31 11:15:48.218  17452-17452/com.example.delivery E/FragmentManager﹕ Activity state:
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ Local FragmentActivity 42b2f318 State:
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ mCreated=truemResumed=false mStopped=true mReallyStopped=true
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ mLoadersStarted=true
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ FragmentManager misc state:
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ mHost=android.support.v4.app.FragmentActivity$HostCallbacks@42b2f580
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ mContainer=android.support.v4.app.FragmentActivity$HostCallbacks@42b2f580
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ mCurState=2 mStateSaved=true mDestroyed=false
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ View Hierarchy:
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ com.android.internal.policy.impl.PhoneWindow$DecorView{42b30338 V.E..... ... 0,0-0,0}
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ android.widget.LinearLayout{42b30980 V.E..... ... 0,0-0,0}
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ android.view.ViewStub{42b31478 G.E..... ... 0,0-0,0 #102031c}
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ android.widget.FrameLayout{42b316d8 V.ED.... ... 0,0-0,0 #1020002 android:id/content}
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ android.widget.RelativeLayout{42b31e78 V.E..... ... 0,0-0,0 #7f0e0080 app:id/activity_public_barcode_scanner}
        12-31 11:15:48.228  17452-17452/com.example.delivery E/FragmentManager﹕ android.widget.TextView{42b32448 V.ED.... ... 0,0-0,0}
        12-31 11:15:48.248  17452-17452/com.example.delivery E/AndroidRuntime﹕ FATAL EXCEPTION: main
            Process: com.example.delivery, PID: 17452
            java.lang.RuntimeException: Unable to resume activity {com.example.delivery/com.example.delivery.activity.PublicBarcodeScannerActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f0e0079 (com.example.delivery:id/container_body) for fragment OrderedItemListFragment{42b552d0 #0 id=0x7f0e0079}
                    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2790)
                    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2819)
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1254)
                    at android.os.Handler.dispatchMessage(Handler.java:102)
                    at android.os.Looper.loop(Looper.java:136)
                    at android.app.ActivityThread.main(ActivityThread.java:5052)
                    at java.lang.reflect.Method.invokeNative(Native Method)
                    at java.lang.reflect.Method.invoke(Method.java:515)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
                    at dalvik.system.NativeStart.main(Native Method)
             Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f0e0079 (com.example.delivery:id/container_body) for fragment OrderedItemListFragment{42b552d0 #0 id=0x7f0e0079}
                    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:882)
                    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
                    at android.app.BackStackRecord.run(BackStackRecord.java:690)
                    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1449)
                    at android.app.Activity.performStart(Activity.java:5257)
                    at android.app.Activity.performRestart(Activity.java:5314)
                    at android.app.Activity.performResume(Activity.java:5319)
                    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2780)
                    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2819)
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1254)
                    at android.os.Handler.dispatchMessage(Handler.java:102)
                    at android.os.Looper.loop(Looper.java:136)
                    at android.app.ActivityThread.main(ActivityThread.java:5052)
                    at java.lang.reflect.Method.invokeNative(Native Method)
                    at java.lang.reflect.Method.invoke(Method.java:515)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
                    at dalvik.system.NativeStart.main(Native Method)

请帮我解决这个问题

【问题讨论】:

    标签: android android-layout android-fragments android-intent android-activity


    【解决方案1】:

    这里:

    ft.replace(R.layout.activity_main, orderedItemListFragment);
    

    当前将布局文件id作为第一个参数传递,但替换方法所需的布局容器id,即R.id.container_body

    传递想要用作片段容器的布局ID,例如:

    ft.replace(R.id.container_body, orderedItemListFragment);
    

    【讨论】:

      【解决方案2】:

      问题是android在其activityactivity_public_barcode_scanner的布局中找不到布局容器container_body。所以它显示了类似的错误No view found for id 0x7f0e0079

       ft.replace(R.id.container_body, orderedItemListFragment); 
      

      确保activity_public_barcode_scanner 中有container_body

      【讨论】:

      • 嗨 Kartheek 感谢您的回复我想替换我在 container_body 上的另一个片段布局 fragment_ordered_item_list 并且容器主体在 activity_main 中可用
      • 为了将片段添加到当前活动,容器应该在相同的活动布局中可用(这里是activity_public_barcode_scanner)。
      • 嗨 Kartheek 我已经在 ctivity_public_barcode_scanner 中添加了容器,它现在可以工作,但这不是我的要求,在使用 PublicBarcodeScannerActivity.java 活动扫描条形码后,我想重定向到 OrdersFragment.java 片段,为此我需要做什么?
      【解决方案3】:

      替换片段缺少 id。 activity_public_barcode_scanner 是打开 PublicBarcodeScannerActivity 类的主要布局。您可以通过替换布局 id 而不是新布局来打开新的 Fragment

       ft.replace(R.layout.activity_main, orderedItemListFragment);
      

      错了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 2011-07-09
        • 2013-10-20
        • 2014-09-01
        相关资源
        最近更新 更多