java - নির্দিষ্ট সন্তানের ইতিমধ্যে একটি পিতামাতা আছে। আপনাকে অবশ্যই প্রথমে সন্তানের পিতামাতার কাছে অপসারণ ভিউ() কল করতে হবে




android android-edittext (10)

আমার অ্যাপ্লিকেশনটিতে, আমাকে প্রায়শই দুটি বিন্যাসের মধ্যে স্যুইচ করতে হয়। ত্রুটিটি নীচে পোস্ট করা লেআউটে ঘটছে।

যখন আমার লেআউটটিকে প্রথমবার বলা হয় তখন কোনও ত্রুটি ঘটে না এবং সবকিছু ঠিক থাকে। তারপরে আমি যখন কোনও ভিন্ন লেআউট (একটি ফাঁকা একটি) কল করি এবং তারপরে আমার লেআউটটিকে দ্বিতীয়বার কল করি, এটি আমাকে নিম্নলিখিত ত্রুটি দেয়:

> FATAL EXCEPTION: main
>     java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

আমার লেআউট-কোডটি দেখতে এমন দেখাচ্ছে:

    tv = new TextView(getApplicationContext()); // are initialized somewhere else
    et = new EditText(getApplicationContext()); // in the code


private void ConsoleWindow(){
        runOnUiThread(new Runnable(){

     @Override
     public void run(){

        // MY LAYOUT:
        setContentView(R.layout.activity_console);
        // LINEAR LAYOUT
        LinearLayout layout=new LinearLayout(getApplicationContext());
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        // TEXTVIEW
        layout.addView(tv); //  <==========  ERROR IN THIS LINE DURING 2ND RUN
        // EDITTEXT
        et.setHint("Enter Command");
        layout.addView(et);
        }
    }
}

আমি জানি এই প্রশ্নটি আগে জিজ্ঞাসা করা হয়েছিল, তবে এটি আমার ক্ষেত্রে সহায়তা করে নি।


frameLayout.addView (bannerAdView); <----- যদি আপনি এই লাইনে ত্রুটি পান তবে নীচের মতো করুন ..

if (bannerAdView.getParent() != null)

  ((ViewGroup) bannerAdView.getParent()).removeView(bannerAdView);

   frameLayout.addView(bannerAdView);     <------ now added view

আপনি ইতিমধ্যে দৃশ্যটি যুক্ত করেছেন কিনা তা পরীক্ষা করে দেখুন

View root = inflater.inflate(R.layout.single, null);
LinearLayout lyt = root.findViewById(R.id.lytRoot);
lytAll.addView(lyt);  // ->  crash

আমার ক্ষেত্রে সন্তানের দৃশ্যের ইতিমধ্যে পিতা-মাতার দৃষ্টিভঙ্গিটি আলাদা ছিল আমি পিতা-মাতার ভিউয়ের মধ্যে সন্তানের দৃশ্যটি বিভিন্ন পিতামাতার সাথে যুক্ত করছি। নীচে উদাহরণ কোড

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/lineGap"
>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/black1"
    android:layout_gravity="center"
    android:gravity="center"
    />

</LinearLayout>

এবং আমি এই দৃষ্টিভঙ্গিটি ফুটিয়ে তুলছি এবং অন্য লিনিয়ারলআউটে যুক্ত করছি, তারপরে আমি উপরের লেআউটটি থেকে লিনারআলআউটটিকে সরিয়ে দিয়ে এর কাজ শুরু করলাম

নীচে কোডটি সমস্যার সমাধান করেছে:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:gravity="center"
   android:textColor="@color/black1" />

আমার ক্ষেত্রে সমস্যাটি এই কারণে হয়েছিল যে আমি <merge> লেআউটটি সহ পিতামাতার ভিউতে স্ফীত করছি। এই ক্ষেত্রে, addView() ক্র্যাশ ঘটায়।

view = inflater.inflate(R.layout.qr_fragment, container, false);

addView() অপসারণ সমস্যার সমাধান করতে সহায়তা করে।


আমি অন্য একটি সমাধান পেয়েছি:

if(tv!= null){
    ((ViewGroup)tv.getParent()).removeView(tv); // <- fix
}

এখানে আমার কাছে কেবলমাত্র একটি আইপি স্টেটমেন্ট চেক আছে যদি ভিউটির কোনও পিতা-মাতা থাকে এবং এটি যদি নতুন ডায়ালগ তৈরি করে না, কনটেন্টভিউ সেট করে এবং আমার "createAlgorithmDialog ()" পদ্ধতিতে ডায়লগটি দেখায়।

এটি অনক্লিকলিস্টনারগুলির সাহায্যে ইতিবাচক এবং নেতিবাচক বোতামগুলি (ঠিক আছে এবং বাতিল বোতামগুলি) সেট করে।


আমি আমার পুনর্ব্যবহারযোগ্য সাথে ত্রুটিটি অনুসন্ধান করতে এখানে এসেছি তবে সমাধানটি কার্যকর হয়নি (স্পষ্টতই)। পুনর্ব্যবহারযোগ্য ক্ষেত্রে আমি এর কারণ ও সমাধান লিখেছি। আশা করি এটি কাউকে সাহায্য করবে।

onCreateViewHolder() এ নিম্নলিখিত পদ্ধতিটি অনুসরণ করা হলে ত্রুটি দেখা দেয়:

layoutInflater = LayoutInflater.from(context);
return new VH(layoutInflater.inflate(R.layout.single_row, parent));

পরিবর্তে এটি করা উচিত

return new VH(layoutInflater.inflate(R.layout.single_row, null));

কোনও ভিউয়ের বাচ্চা আছে কি না তা পরীক্ষা করতে আপনি এই মেথোডটি ব্যবহার করতে পারেন।

public static boolean hasChildren(ViewGroup viewGroup) {
    return viewGroup.getChildCount() > 0;
 }

ত্রুটি বার্তাটি আপনাকে যা করা উচিত তা বলে।

// TEXTVIEW
if(tv.getParent() != null) {
    ((ViewGroup)tv.getParent()).removeView(tv); // <- fix
}
layout.addView(tv); //  <==========  ERROR IN THIS LINE DURING 2ND RUN
// EDITTEXT

মিথ্যা পরিবর্তে মূলের সাথে সংযুক্তি ব্যবহার করে একটি টুকরো টুকরো করার চেষ্টা করার সময় আমি এই বার্তাটি পেয়েছি:

return inflater.inflate(R.layout.fragment_profile, container, true)

করার পরে:

return inflater.inflate(R.layout.fragment_profile, container, false)

এটা কাজ করেছে.


যদি অন্য সমাধানগুলি কাজ করে না:

View view = inflater.inflate(R.layout.child_layout_to_merge, parent_layout, false);

আপনি খন্ডের অনক্রিটভিউ থেকে কী ফিরে আসছেন তা যাচাই করুন এটি কি একক দর্শন বা ভিউগ্রুপ? আমার ক্ষেত্রে এক্সএমএল টুকরাটির মূলের উপরে আমার ভিউপিজার ছিল এবং আমি ভিউপ্যাজারটি ফিরছিলাম, যখন আমি বিন্যাসে ভিউগ্রুপ যুক্ত করেছি তখন আপডেট হয়নি যে আমাকে এখন ভিউগ্রুপটি ফিরিয়ে দিতে হবে, ভিউপ্যাজারটি (দর্শন) নয়।





parent-child