टुकड़े - निर्दिष्ट बच्चे के पास पहले से ही एक माता-पिता हैं। आपको पहले बच्चे के माता-पिता पर निष्कासन () देखना होगा


80

मुझे यह त्रुटि मिल रही है। मैंने कई समाधानों की कोशिश की लेकिन मैंने इसे हल नहीं किया। मेरी मदद करो! मुझे अंशों का उपयोग करके गतिविधि को सतह दृश्य और बटन जोड़ना होगा।

CamActivity.java:

public class CamActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cam);
        
        FragmentManager fm = getSupportFragmentManager();
        
        Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
        
        if(fragment == null) {
            fragment = new CamFragment();
            fm.beginTransaction()
            .add(R.id.fragmentContainer, fragment)
            .commit();
        }
    }
}

CamFragment.java:

public class CamFragment extends Fragment {

    private static final String TAG = "CamFragment";
    
    private Camera mCamera;
    private SurfaceView mSurfaceView;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.camera_fragment, parent);
    
    Button capturePic = (Button)v.findViewById(R.id.img_capture);
    capturePic.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View v) {
            getActivity().finish();
        }
    });
    
    mSurfaceView = (SurfaceView)v.findViewById(R.id.surfaceView1);
    return v;
}

}

त्रुटि:

04-18 13:24:12.735: E/AndroidRuntime(6321): FATAL EXCEPTION: main
04-18 13:24:12.735: E/AndroidRuntime(6321): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pack.camdictionary/com.pack.camdictionary.CamActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1728)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1747)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread.access$1500(ActivityThread.java:155)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.os.Handler.dispatchMessage(Handler.java:130)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.os.Looper.loop(SourceFile:351)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread.main(ActivityThread.java:3814)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at java.lang.reflect.Method.invokeNative(Native Method)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at java.lang.reflect.Method.invoke(Method.java:538)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:659)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at dalvik.system.NativeStart.main(Native Method)
04-18 13:24:12.735: E/AndroidRuntime(6321): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.view.ViewGroup.addViewInner(ViewGroup.java:2007)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.view.ViewGroup.addView(ViewGroup.java:1902)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.view.ViewGroup.addView(ViewGroup.java:1859)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.view.ViewGroup.addView(ViewGroup.java:1839)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1166)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.Activity.performStart(Activity.java:3837)
04-18 13:24:12.735: E/AndroidRuntime(6321):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1701)
04-18 13:24:12.735: E/AndroidRuntime(6321):     ... 11 more

जब अपवाद हुआ। पर capturePic क्लिक करें या इसे पहले।
मैडी डी

मुझे getParent कहाँ कॉल करना चाहिए ?? इससे पहले @ कामेडी
विवेक

1
अपनी activity_camxml फ़ाइल पोस्ट करें
maddy d

जवाबों:


198

बदलने का प्रयास करें

View v = inflater.inflate(R.layout.camera_fragment, parent);

साथ में

View v = inflater.inflate(R.layout.camera_fragment, parent, false);

या

View v = inflater.inflate(R.layout.camera_fragment, null);

10
माता-पिता के रूप में अशक्त गुजरने से बचने की कोशिश करें, उनके द्वारा उल्लेखित पहले विकल्प का उपयोग करें
डॉमिनिक

7
@sudocoder अपने जवाब देने के लिए क्यों? जनक उस पदानुक्रम का मूल दृश्य है जिसे आप संसाधन को संलग्न करने के लिए फुला रहे हैं, LayoutInflater स्वचालित रूप से फुलाए गए दृश्य को आपूर्ति किए गए रूट में संलग्न करने का प्रयास करेगा। हालाँकि, फ्रेमवर्क में एक चेक होता है कि यदि आप रूट के लिए null पास करते हैं तो यह उर ऐप को क्रैश होने से बचाने की कोशिश को दरकिनार कर देता है। XML के मूल तत्व में दिए गए LayoutParams के प्रवाह के मूल्यांकन के लिए यह आवश्यक है। यहाँ कुछ भी नहीं कर रहा है फ्रेमवर्क बता रहा है और न ही फुलाए हुए एक्सएमएल के मूल दृश्य को जानें।
इल्तज़ डेस

2
अच्छी व्याख्या bignerdranch.com/blog/…
राजेश खड़का

धन्यवाद! आपने मेरे घंटे बचाए थे।
फेयरवेल

8

इस सवाल का जवाब पहले ही दिया जा चुका था लेकिन फिर भी मैं तीसरे पैरामीटर के रूप में गलत जोड़ने का कारण जोड़ना चाहूंगा ।

फुलाया () विधि तीन तर्क लेता है:

  • जिस लेआउट को आप बढ़ाना चाहते हैं उसकी संसाधन आईडी।
  • ViewGroup फुलाया लेआउट के माता पिता होने के लिए। सिस्टम के लिए कंटेनर को पास करना महत्वपूर्ण है ताकि मूल मापदंडों को मूल दृश्य द्वारा निर्दिष्ट फुलाए गए लेआउट के मूल दृश्य पर लागू किया जा सके।
  • एक बूलियन यह दर्शाता है कि मुद्रास्फीति के दौरान फुलाया गया लेआउट व्यूग्रुप (दूसरे पैरामीटर) से जुड़ा होना चाहिए या नहीं। (इस मामले में, यह गलत है क्योंकि सिस्टम पहले से ही कंटेनर में फुलाया हुआ लेआउट सम्मिलित कर रहा है - पासिंग ट्रू अंतिम लेआउट में एक निरर्थक दृश्य समूह बनाएगा।)

स्रोत: http://developer.android.com/guide/compenders/fragments.html


7

मेरे मामले में, मैं के setTransition()दौरान कर रहा था FragmentTransaction। नीचे दिए गए कोड ने मेरे लिए काम किया:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        if(this::rootView.isInitialized){
            if(rootView.getParent() != null){
                (rootView.getParent() as ViewGroup).endViewTransition(rootView)
            }
            return this.rootView

        }

        ...

}

यह संभवतः तब होता है जब आप बार-बार टुकड़ों के बीच स्विच करते हैं, कि दृश्य को चल रहे संक्रमण के कारण माता-पिता से वास्तव में अलग होने का समय नहीं मिलता है।


हां, मैं इसकी पुष्टि कर सकता हूं। मेरे विशिष्ट मामले में, मेरे कुछ अंशों में भारी और जटिल UI हैं जैसे कि Google MapViewऔर उपयोगकर्ता अक्सर ऐसे अंशों के बीच नेविगेट कर सकते हैं। क्योंकि हर बार उनका दृष्टिकोण पूरी तरह से बोझिल हो जाता है, इसलिए मैं कैशिंग (फ्रैगमेंट में दृश्य के उदाहरण को बनाए रखना और उसे वापस करना onCreateView) देख रहा हूं । लेकिन 2 ऐसे अंशों के बीच संक्रमण एनिमेशन के कारण, दोनों विचार संक्षिप्त रूप से मौजूद हैं और यदि उपयोगकर्ता जल्दी से वापस नेविगेट करता है, तो यह दुर्घटनाग्रस्त हो जाएगा। अतः पुकार endViewTransitionही समाधान है। बहुत बहुत धन्यवाद और +1 अच्छी तरह से योग्य है।
मैकॉविच

इसके अलावा, एक साइड नोट पर और अजीब तरह से, मेरा मुद्दा वर्तमान में एंड्रॉइड 9 पर चलने वाले विशेष रूप से हुवावेई उपकरणों से संबंधित है। लेकिन इस मुद्दे को एक नेक्सस 5 और अन्य असंबंधित उपकरणों पर पुन: प्रस्तुत किया जा सकता है। क्यों, मुझे नहीं पता ... वहाँ एक एनीमेशन कार्यान्वयन मुद्दा हो सकता है उचित EMUI OS / Huawei के लिए यह इतना आसान होने के लिए इतनी बार?
मैकॉविच

यह उत्तर सुनहरा है
coolcool1994

5

मैं एपीआई 26.0.2 का उपयोग कर रहा हूं और मेरे मामले में, दुर्घटना मेरे टुकड़े के लिए निर्धारित कस्टम एनिमेशन के कारण हो रही थी। कस्टम एनीमेशन सेट करने के लिए कॉल को टिप्पणी करते हुए, समस्या को ठीक किया।

fragmentTransaction.setCustomAnimations (android.R.anim.fade_in, android.R.anim.fade_out);


इस टिप्पणी के लिए धन्यवाद का बंडल। मैंने इस लिंक को खोला लेकिन आपका उत्तर नहीं मिला। इसे डीबग करने में 3 दिन लगे। अगर आपका जवाब नहीं दिखता तो मैं और दिन बिता सकता था।
कादिर हुसैन

क्या आपको setCustomAnimations के साथ इस काम को करने का कोई तरीका मिला?
कादिर हुसैन

@QadirHussain क्षमा करें हुसैन मैंने कोशिश नहीं की।
सत्येश

2

मैं इस समस्या से भी मिला, और यह मेरा समाधान है। यह बहुत आसान है

View v;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if (v == null) {
        v = inflater.inflate(R.layout.camera_fragment, container);
    } else {
        ViewGroup parent = (ViewGroup) v.getParent();
        if (parent != null) {
            parent.removeView(v);
        }
    }
    return v;
}

आपके लिए उपयोगी होने की उम्मीद है



0

केवल आपके सन्दर्भ के लिए। यह एंड्रॉइड एसडीके में एक मुद्दा लगता है।

मेरे पास वैसी ही स्थिति है जैसी @ सतीश के पास SDK वर्जन: 27.0.2 के साथ थी और setCustomAnimation लगता है को हटाने की कोशिश की जा रही है। लेकिन setCustomAnimations को हटाने के लिए मेरे लिए बहुत सारे बदलाव की आवश्यकता है, मैं कस्टम एनीमेशन रखना पसंद करूंगा। मैंने जो किया है वह एसडीके को नवीनतम संस्करण में अपग्रेड करना है जो अभी के लिए 27.1.1 है। और यह मेरे लिए काम करता है।


0

हेल्पफुल हो सकता है

           View customView1;
           inflater= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           customView1= inflater.inflate(R.layout.edit_custom_alert_window, null);     
           try {
                if(customView2.getParent()!=null)
                    ((ViewGroup)customView2.getParent()).removeView(customView2);
            }catch (Exception e){

            }

0

मेरे पास मेरे कोड में नेविगेशन था और यह त्रुटि तब दिखाई गई थी जब मैंने किसी एक टुकड़े से बैक बटन पर क्लिक किया था। यह तब हल हुआ जब nav_graph में मैंने संबंधित कार्रवाई में popUpTo डाला । कुछ कार्रवाई की गई लेकिन कुछ भी पॉपअप नहीं किया गया।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.