অ্যান্ড্রয়েড টুকরা আইডির জন্য কোনও দর্শন পাওয়া যায় নি?


287

আমার একটি খণ্ড রয়েছে আমি একটি ভিউতে যুক্ত করার চেষ্টা করছি।

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

এই কোডটি কার্যকর করা হলে আমি ডিবাগের মধ্যে নিম্নলিখিত ত্রুটিটি পাই ..

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityএটি একটি খণ্ড যা এক্সএমএলে ফ্রেগমেন্ট লেআউটে সেট করা আছে।
আমি একটি FragmentActivity ব্যবহার করছি অসম্পূর্ণ অংশ লেআউট অধিষ্ঠিত হোস্ট করার জন্য feed_parser_layout
আমি কি এটিকে উপরে সঠিকভাবে কোডিং করছি?


3
আপনি কি এক্সএমএল অন্তর্ভুক্ত করতে পারেন?
jsmith

1
ক্রিয়াকলাপে সেটকন্টেন্টভিউ কল করার আগে খণ্ডিত লেনদেন করার সময় কেউ একই ত্রুটি পেতে পারে
পাভেল

উত্তর:


374

আমি খুব এই সমস্যা হচ্ছে ছিল, যতক্ষণ না আমি বুঝতে পারি যে আমি ভুল বিন্যাস নিদিষ্ট ছিল setContentView()এরonCreate() FragmentActivity পদ্ধতি।

FragmentTransaction.add()আপনার ক্ষেত্রে আইডিটি দেওয়া হয়েছে , এটি R.id.feedContentContainerঅবশ্যই নির্দিষ্ট করা বিন্যাসের শিশু হতে হবেsetContentView()

আপনি আমাদের আপনার onCreate()পদ্ধতিটি দেখান নি , তাই সম্ভবত এটি একই সমস্যা।


5
সেটকন্টেন্টভিউতে উল্লিখিত বিন্যাসের শিশু বলতে কী বোঝ? কীভাবে এটি শিশু তৈরি করবেন?
নিনজা কোডার

11
এক্সএমএলে প্যারেন্ট ভিউয়ের অভ্যন্তরে ঘোষিত হলে ভিউটি অন্য দর্শনের একটি শিশু is অর্থাত। একটি TextViewভিতরে RelativeLayoutএকটি সন্তানের হয় RelativeLayout
হোয়েটল

@ হাওয়েটল: আমি জানি এটি বেশ পুরানো পোস্ট post তবে আমি আপনার উত্তর দিয়ে এই সমস্যাটি ঠিক করতে পারছি না। এখানে এসও প্রশ্ন: স্ট্যাকওভারফ্লো / প্রশ্ন / 25844394/… - আপনি কি দয়া করে আমাকে এই সাহায্য করতে পারেন? ধন্যবাদ!
TheDevMan

@ হাওয়েটল, আপনি কি দয়া করে অনুরূপ ইস্যুতে আমাকে সাহায্য করতে পারেন? stackoverflow.com/questions/26966623/…
বংশী চালা

3
আমার সাথে ঘটেছে. সিটিআরএল + সি সিটিআরএল + ভি এর ডাউনসাইড।
0nyx

296

নেস্টেড টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করা এবং getChildFragmentManager () এর পরিবর্তে getSupportFraamentManager () যুক্ত করার সময়ও এই ত্রুটি ঘটে ।


10
আমার অন্য রাউন্ড ছিল। GetChildFragmentManager () কল করার সাথে মূল টুকরা পাত্রে যুক্ত করার চেষ্টা করা হয়েছিল। এটি নির্দেশ করে আমার জন্য এটি সমাধান করে। ধন্যবাদ +1
স্পিডিনোমডস

@ মালাচিয়াজ: ভিউপ্যাজার সম্পর্কে আপনি কি এই প্রশ্নটি একবার দেখে নিতে পারেন? আপনাকে স্ট্যাকওভারফ্লো.com
হোয়া ভু

এটা ঠিক আমার সমস্যা ছিল, ধন্যবাদ। যদিও অদ্ভুত, এটি কেবলমাত্র শো। () কল করার সময় ল্যান্ডস্কেপ অভিযোজনে ঘটেছিল। মূল খণ্ডটি প্রতিস্থাপন করতে এটি ব্যবহার করে সূক্ষ্মভাবে কাজ করে।
কোহেনডায়ার

1
এটাই ছিল আমার সমস্যা, আপনাকে অনেক ধন্যবাদ! এটি কেবল কিছু ধীর ডিভাইসে ঘটছিল, তাই ঠিক কী ঘটছে তা বোঝা শক্ত ছিল।
ইয়াওরানেস

1
এই প্রশ্নটি একাধিকবার আসার পরে আমি অনুভব করেছি যে আমার কারওই সমস্যা নেই, কেবল কিছুটা নিচে স্ক্রোল করতে হয়েছিল। যদি তারা ত্রুটি কোডটি আরও সুনির্দিষ্ট করে বলতে পারে যে এটি হতে পারে তবে এটি দুর্দান্ত হবে।
KodyVanRy

67

সমাধানটি ব্যবহার করা ছিল getChildFragmentManager()

পরিবর্তে getFragmentManager()

যখন একটি খণ্ড থেকে কল। আপনি যদি কোনও ক্রিয়াকলাপ থেকে পদ্ধতিটি কল করছেন তবে ব্যবহার করুন getFragmentManager()

এটি সমস্যার সমাধান করবে।


4
getSupportFragmentManager()পরিবর্তে @ surfer190 ব্যবহার করুন।
আমির হোসাইন ঘাসেমি

চাইল্ডফ্রেগমেন্টম্যানেজার () এ পরিবর্তিত হয়েছে এবং এটি কাজ করে !!
শ্যাম

আমার ক্ষেত্রে আমি নীচে শীট খণ্ডে ভিউপ্যাজার ব্যবহার করে খণ্ড ন্যাভিগেশন ব্যবহার করছিলাম। আপনার সমাধানটি দুর্দান্তভাবে কাজ করেছে !! থানक्स ব্রো টন।
দেবাশীষ ঘোষ

1
একই সমস্যা ছিল এবং এটি আমার জন্য এটি সমাধান করেছে! getActivity () এর পরিবর্তে getChildFraamentManager () পান। getFragmentManager () যা একবারে আমি এটি সম্পর্কে ভেবে দেখেছিলাম তা বোঝায় :) TY!
সাইমন

আমি কোনও ক্রিয়াকলাপ থেকে পদ্ধতিটি কল করছি কিন্তু getFragmentManager()এখন অবহেলিত!
আলিরেজা নুরালি

29

আমার এই সমস্যাটি ছিল (কোডে আমার ইউআই তৈরি করার সময়) এবং এটি আমার ViewPager(যেগুলি দেখায় Fragment) আইডি সেট না থাকার কারণে ঘটেছিল , তাই আমি কেবল ব্যবহার করেছি pager.setID(id)এবং তারপরে এটি কাজ করেছে।

এই পৃষ্ঠাটি আমাকে তা বুঝতে সাহায্য করেছে।


1
ভিউপ্যাজার ব্যবহার করার সময় আমারও একই সমস্যা ছিল। লেনদেন সম্পাদনের আগে ভিউপেজ.সিটারকন্টারআইটেম (এন) ব্যবহার করে একই ত্রুটি ঠিক করা হয়েছিল। এটি কারও পক্ষে কাজে লাগবে।
কার্ক Hammett

আমার ক্ষেত্রে একই দিক ছিল তবে সমস্যাটি ছিল আমি .setID এ নেতিবাচক মানটি ব্যবহার করেছি। ইতিবাচক পূর্ণসংখ্যা ব্যবহার করে সমস্যার সমাধান হয়েছে।
ইগনাসিও হাগোপিয়ান

29

আর একটি দৃশ্যের সাথে আমার দেখা হয়েছে। আপনি যদি নেস্টেড টুকরো ব্যবহার করেন তবে এর পৃষ্ঠাগুলি সহ খণ্ডগুলিতে একটি ভিউপাগার বলুন say

আপনি যখন অভ্যন্তরীণ খণ্ডে (ভিউপাগারের পৃষ্ঠা) ফ্রেগমেন্ট লেনদেন করেন তখন আপনার প্রয়োজন হবে

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

getActivity () এখানে মূল কী। ...


হ্যাঁ ... আমার জন্য এগুলি ছাড়াও অন্যান্য সমস্ত বাস্তবায়ন ঠিক ছিল। আমি এই জাতীয় কোডটি সরাসরি অ্যাক্সেস করার চেষ্টা করেছি: ফ্র্যাগমেন্টট্রান্সএশন লেনদেন = getSupportFraamentManager ()। StartTransaction (); তারপরে আপনারা উল্লিখিত মত পৃথকভাবে getActivity () ব্যবহার করে খণ্ডনকারীটি পেলাম। এটি সুন্দরভাবে কাজ করে
আনন্দ ক্রিশ

18

আমার ক্ষেত্রে আমি পেজারযুক্ত ডায়ালগফ্র্যাগমেন্টটি দেখানোর চেষ্টা করছিলাম এবং ফ্রেগমেন্টপাগারএডাপ্টার যখন পেজারে টুকরো যোগ করার চেষ্টা করেছিল তখন এই ব্যতিক্রমটি ছুঁড়ে দেওয়া হয়েছিল। হোয়েটল উত্তরের উপর ভিত্তি করে আমি অনুমান করি যে এটি পেজার প্যারেন্টের কারণে আমার ফ্রেগমেন্টএকটিভিটির সেটকন্টেন্টভিউ () তে সেট করা ভিউ ছিল না।

সমস্যাটি সমাধান করার জন্য আমি একমাত্র পরিবর্তনটি হ'ল getChildFraamentManager () কল করে একটি ফ্রেগমেন্টম্যাজারে পাস করা ফ্র্যাগমেন্টপেইজারএডাপ্টার তৈরি করা হয়েছিল, যা আমি সাধারণত করি ঠিক তেমন getFragmentManager () কল করে প্রাপ্ত নয়।

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

ডাইলেগফ্রেগমেন্ট থেকে getChildFraamentManager () অ্যাক্সেসযোগ্য নয়
আবদালরহমান শতা

14

এই ব্যতিক্রমটি ঘটতে পারে যদি আপনি যে লেআউট আইডিটি দিয়ে FragmentTransaction.replace(int ID, fragment)যাচ্ছেন তা অন্য সজ্জাতে স্ফীত হয়ে রয়েছে। লেআউট আইডিটি অনন্য এবং এটি কাজ করা উচিত তা নিশ্চিত করুন।


বর্তমান লেআউটে অনন্য না হলে আইডিটি অনুপস্থিত থাকলে সংকলকটি প্রতিবেদন করে না , সুতরাং আসল সমস্যাটি আইডির স্বতন্ত্রতা নয়, বর্তমান লেআউটে আইডি বাদ দেওয়া।
স্যামুয়েল

13

আমি এই উত্তরটির সাথে অনুরূপ অন্য থ্রেডে পড়েছি এমন একটি উত্তর যা আমার জন্য কাজ করেছিল যখন আমার এই লেআউটটি এক্সএমএল জড়িত ছিল।

আপনার লগক্যাটটি "আইডি 0x7f080011 এর জন্য কোনও ভিউ পাওয়া যায়নি" বলে।

খুলুন gen->package->R.java->idএবং তারপরে আইডি সন্ধান করুন0x7f080011

আমার যখন এই সমস্যা হয়েছিল তখন এই আইডিটি FrameLayoutআমার মধ্যে একটি সম্পর্কিতactivity_main.xml ফাইলটির

ফ্রেমলআউটের কোনও আইডি নেই (কোনও বিবৃতি ছিল না) android:id = "blablabla" )।

আপনার সমস্ত লেআউটে আপনার সমস্ত উপাদানগুলির আইডি রয়েছে তা নিশ্চিত করুন, বিশেষত উপাদানটি লগকটে উদ্ধৃত হয়েছে।


1
খুশী হলাম। অ্যান্ড্রয়েড স্টুডিও w / LinuxOS এ এটি এখানে: / হোম / বব / অ্যান্ড্রয়েড স্টুডিও ওয়ার্কস্পেস / হ্যালো ওয়ার্ল্ড / অ্যাপ / বিল্ড / উত্পন্ন / উত্স / আর / রিলিজ / অ্যান্ড্রয়েড / সমর্থন / ভি 7 / অ্যাপকম্প্যাট।
পোর্টসম্পল

11

আমি আপগ্রেড com.android.support:support-v4:21.0.0করার সময় এই ত্রুটিটি পেয়েছি com.android.support:support-v4:22.1.1

আমাকে এ থেকে আমার লেআউটটি পরিবর্তন করতে হয়েছিল:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

এটি:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

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


9

সঙ্গে নেস্টেড টুকরা

আমার getChildFragmentManager()জন্য getActivity().getSupportFragmentManager()সমাধান ক্র্যাশ পরিবর্তে ব্যবহার করে

java.lang.IllegalArgumentException: আইডির জন্য কোনও দর্শন পাওয়া যায় নি


তবে অ্যাডাপ্টারের ভিতরে গ্যাচিল্ডের ফ্রেমমেন্ট ম্যানেজারকে ইমপ্রেট করা যাবে কেন
সুনীল চৌধুরী চৌধুরী

8

আমি জানি এটি ইতিমধ্যে একটি দৃশ্যের জন্য উত্তর দেওয়া হয়েছে, তবে আমার সমস্যাটি কিছুটা আলাদা ছিল এবং আমি ভেবেছিলাম যে অন্য কেউ যদি আমার জুতাতে থাকে তবে আমি ভাগ করে নেব।

আমি এর মধ্যে একটি লেনদেন করছিলাম onCreate(), তবে এই মুহুর্তে ভিউ ট্রিটিকে স্ফীত করা হয়নি তাই আপনি এই একই ত্রুটি পান। লেনদেনের কোডটি onResume()তৈরি করা সমস্ত কিছু ঠিকঠাক হয়ে যায়।

সুতরাং কেবল নিশ্চিত হয়ে নিন যে আপনার লেনদেনের কোডটি ভিউ ট্রিতে স্ফীত হওয়ার পরে চলে!


3
হুম ... আমার ক্ষেত্রে এ জাতীয় কোড
অনক্রিয়েট

আমার ক্ষেত্রে @ ইগরগানাপলস্কিও ফ্র্যাগমেন্টের কলব্যাক দিয়ে সমাধান করেছেন onAttach। আমার উত্তর
আলেকজান্ডার মালাখভ

এটা আমার সমস্যা ছিল। দর্শন রাষ্ট্রকে রিফ্রেশ করার জন্য অন্য শ্রেণীর কাছে একটি কল একটি লেআউটে খণ্ডিত লেনদেন করছিল যা এখনও ফুলে উঠেনি। এটির রিসুমে () কল করে বিষয়টি স্থির করে।
এডাব্লুটিটি

8

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

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

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

যাইহোক, কাজের সমাধান খুঁজতে নীচে পড়ুন। ক্র্যাশ ত্রুটি নীচে:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

এটি ডিবাগিং ঘন্টা ব্যয়। নীচে অবধি এই সম্পূর্ণ থ্রেড পোস্টটি পড়ুন যা নিশ্চিত করেই আমি চাইল্ডফ্রেগমেন্টম্যানেজারটি পাশ করছি including

কিছুই কাজ হয়নি।

অবশেষে ফ্র্যাগমেন্টস্টেটপেজারএডাপ্টার ব্যবহার না করে আমি পেজারআডাপ্টারটি প্রসারিত করেছি এবং খণ্ডগুলি ব্যবহার না করে ভিউপ্যাজে এটি ব্যবহার করেছি। আমি বিশ্বাস করি কিছু যেখানে নেস্টেড টুকরা সহ একটি বিইউজি আছে। যাইহোক, আমাদের কাছে বিকল্প রয়েছে। পড়ুন ...

নীচের লিঙ্কটি খুব সহায়ক ছিল:

খণ্ডবিহীন ভিউপেজার

লিঙ্কটি মারা যেতে পারে তাই আমি এখানে আমার প্রয়োগিত সমাধানটি পোস্ট করছি:

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

আশা করি এটি সহায়ক ছিল !!


হ্যাঁ, এই সমাধানটি কাজ করেছে, তবে আমি যদি নিজের জীবনচক্র এবং ভেরিয়েবলগুলি দিয়ে কেবল দৃশ্যের সাহায্যে কঠিন নির্মাণের প্রয়োজন হয় তবে কী হবে? এটি প্লে এবং নিঃশব্দ বোতামগুলির সাথে ভিডিওভিউ এবং চিত্রবিউজের সাথে ব্যবহৃত হবে। আমার মামলার জন্য কোন উপকারী?
নিকিতা অ্যাক্সিওনভ

আমি বিশ্বাস করি এটি কারণ: স্ট্যাকওভারফ্লো.com
হোয়াং এনগুইন হু

7

আমার একই সমস্যা ছিল তবে আমার সমস্যাটি ওরিয়েন্টেশন পরিবর্তনে ঘটছিল। অন্য কোনও সমাধান কাজ করেনি। সুতরাং দেখা যাচ্ছে যে setRetainInstance(true);স্ক্রিনের আকারের উপর ভিত্তি করে দুটি বা এক ফলক বিন্যাস করার সময় আমি আমার টুকরো টুকরো টুকরো করা থেকে ভুলে গিয়েছিলাম ।


আপনার সেটটিকে মিথ্যা করুন রিটেনইনস্ট্যান্স (সত্য) আপনি যদি কোনও নেস্টেড টুকরোতে থাকেন তবে এটি ত্রুটিটি ঠিক করবে।
ralphgabb

5

আমার ভুল ছিল FragamentTransaction

আমি এর t.replace(R.layout.mylayout);পরিবর্তে এটি করছিলামt.replace(R.id.mylayout);

পার্থক্যটি হ'ল একটি হ'ল বিন্যাস এবং অন্যটি হ'ল একটি রেফারেন্স layout(id)


4

আমি যদি কারওর মতো বোকা ভুল করি তবে; আপনি কোথাও ক্রিয়াকলাপের সামগ্রীটি ওভাররাইট করছেন না তা পরীক্ষা করুন (যেমন সেটকাউন্ট ভিউতে অতিরিক্ত কলগুলি সন্ধান করুন)

আমার ক্ষেত্রে, অযত্ন অনুলিপি এবং আটকানোর কারণে, আমি আমার খণ্ডে ডেটাবাইন্ডিং ইউটি.সেট কনটেন্টভিউ ব্যবহার করেছি, ডাটাবাইন্ডিং ইন্টিলিফ্লেটের পরিবর্তে, যা ক্রিয়াকলাপের পরিস্থিতিকে গোলমাল করে।


3

আমার এই একই সমস্যা ছিল, আমাকে আমার কোড পোস্ট করুন যাতে আপনি সকলেই এটি দেখতে পারেন এবং আমি যা করেছি তা একইভাবে না করে।

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

দ্রষ্টব্য যে আমি আগে টুকরা সেট আপ ছিল setContentView। ওহো।


1
ধন্যবাদ! আমি একই কাজ করছিলাম, তাই আমি setContentViewআমারonBuildHeaders
র্যান্ডি

3

এই পৃষ্ঠাটি ফ্রেগমেন্ট অবৈধঅর্গুমেন্টএক্সসেপশন সম্পর্কে পরামর্শ পোস্ট করার জন্য একটি ভাল কেন্দ্রীয় অবস্থান বলে মনে হচ্ছে। এখানে আপনি আরও একবার চেষ্টা করতে পারেন। শেষ পর্যন্ত আমার পক্ষে এটিই কাজ করেছিল:

আমি ভুলে গিয়েছিলাম যে ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য আমার একটি পৃথক বিন্যাস ফাইল ছিল। আমি সেখানে আমার ফ্রেমলআউট কনটেইনার যুক্ত করার পরেও খণ্ডটি কাজ করেছিল।


একটি পৃথক নোটে, যদি আপনি ইতিমধ্যে এই পৃষ্ঠাতে (এবং পুরো ইন্টারনেটও) প্রস্তাবিত অন্য সমস্ত কিছু চেষ্টা করে দেখেছেন এবং কয়েক ঘন্টা ধরে চুল কাটাচ্ছেন, কেবল বিরক্তিকর টুকরো টুকরো টুকরো করে ফিরুন এবং একটি ভাল পুরানো স্ট্যান্ডার্ড লেআউটে ফিরে যাওয়ার কথা বিবেচনা করুন। (অবশেষে আমার সমস্যাটি আবিষ্কার করার সময় আমি যা করতে চাইছিলাম তা আসলে)) আপনি এখনও ধারক ধারণাটি ব্যবহার করতে পারেন। তবে এটি কোনও খণ্ড দিয়ে পূরণ করার পরিবর্তে, আপনি আপনার টুকরোটিতে includeযে লেআউট ব্যবহার করেছেন তা একই লেআউটে পূরণ করতে আপনি এক্সএমএল ট্যাগটি ব্যবহার করতে পারেন । আপনি আপনার মূল বিন্যাসে এরকম কিছু করতে পারেন:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

former_fragment_layoutআপনি যে xML লেআউট ফাইলটি ব্যবহার করতে চেষ্টা করেছিলেন তা এর নাম কোথায় । দেখুন অন্তর্ভুক্ত সঙ্গে পুনরায় ব্যবহার লেআউট আরও তথ্যের জন্য।


এটি একটি ভাল পরামর্শ, তবে যদি কোনওটিকে গতিশীলভাবে খণ্ডগুলিতে স্যুইচ করার প্রয়োজন হয় তবে এটি কাজ করে না। এছাড়াও এটি পুনঃব্যবহারযোগ্যতা হ্রাস করে, কারণ আপনি খণ্ডে আচরণ (কোড) ব্যবহার করতে পারবেন।
আলেকজান্ডার মালাখভ

আমি অবশ্যই একমত। খণ্ডগুলি আরও ভাল far
সুরাগ

2

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

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

আমি যা করতে ভুলে গেছি তা নিশ্চিত করে দেওয়া হয়েছিল যে আমার কোডটি দুটিবার না চলে। অ্যান্টিচড টু উইন্ডো ইভেন্টে, আমার ডায়নামিক সাপোর্টম্যাপফ্র্যাগমেন্টটি এর কোনও নতুন উদাহরণ তৈরি করার চেষ্টা করার আগে এবং এখনও একটি খণ্ড প্রতিস্থাপন করার চেষ্টা করে কিনা তা পরীক্ষা করে দেখুন। আইটেমটি যখন রিসাইক্লারভিউয়ের শীর্ষে চলে যায়, তখন এটি উইন্ডো থেকে আলাদা হয়ে যায়, আপনি যখন আবার স্ক্রোল করেন তখন পুনরায় সংযুক্ত হন, সুতরাং এই ইভেন্টটি একাধিকবার নিক্ষেপ করা হয়।

আমি একবার নাল চেক যোগ করার পরে, এটি কেবল একবার রিসাইক্লারভিউ আইটেমের মধ্যে ঘটেছিল এবং সমস্যাটি চলে গেছে! টি এল; ডিআর!


2

আপনি যখন অন্য কোনওটির অভ্যন্তরে কোনও খণ্ড থেকে কল করছেন তখন এটি ঘটে।

ব্যবহার:

getActivity().getSupportFragmentManager().beginTransaction();

1

আমি যখন আমার খণ্ডের সাথে ভিউ প্রতিস্থাপন করার চেষ্টা করেছি তখন আমি এই সমস্যার মুখোমুখি হয়েছি onCreateView()। এটার মত:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

এটা আমাকে বলেছে

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

তারপরে আমি প্রতিস্থাপনের সাথে এই সমস্যাটি স্থির করেছি onActivityCreated()। এটার মত:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. আপনাকে একটি ভিউ ফিরে আসতে হবে onCreateView() যাতে আপনি এটি পরে প্রতিস্থাপন করতে পারেন
  2. আপনি এই মতামতের দিকে কোনও ক্রিয়াকলাপটি খণ্ড লিফটিক্যাল-এর মতো নিম্নলিখিত ক্রিয়ায় রাখতে পারেন like onActivityCreated()

আশাকরি এটা সাহায্য করবে!


1

আমি এই বাগটি ঠিক করেছি, আমি commitNow()প্রতিস্থাপনটি ব্যবহার করি commit()

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

commitNowএকটি সিঙ্ক পদ্ধতি, commit()পদ্ধতি একটি ASYNC পদ্ধতি।


1

আমার ক্ষেত্রে এই ব্যতিক্রমটি ছুঁড়ে দেওয়া হয়েছিল যখন আমি একই লেআউট উপাদানটির জন্য বিভিন্ন আইডি ব্যবহার করেছি (খণ্ডের স্থানধারক) বিভিন্ন বিল্ড ভেরিয়েন্টের জন্য বেশ কয়েকটি রয়েছে having আপনি প্রথমবারের জন্য খণ্ড প্রতিস্থাপন করার সময় কোনও কারণে এটি পুরোপুরি ভাল কাজ করে তবে আপনি যদি আবার এটি করার চেষ্টা করেন তবে আপনি এই ব্যতিক্রমটি পাবেন। সুতরাং আপনার যদি বিভিন্ন বিল্ড ভেরিয়েন্টের জন্য একাধিক লেআউট থাকে তবে আপনি একই আইডিটি ব্যবহার করছেন তা নিশ্চিত হন।


0

আপনি যদি কোনও খণ্ডের মধ্যে একটি খণ্ডকে প্রতিস্থাপনের চেষ্টা করছেন fragmentManagerতবে আপনি পিতামণ্ডিত টুকরাটি স্ফীত করছেন না যা সমস্যার কারণ হতে পারে।

ইন BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

super.onCreateView(inflater, container, savedInstanceState); খণ্ডটির জন্য সঠিক বিন্যাসটি স্ফীত করে প্রতিস্থাপন করুন :

        return inflater.inflate(R.layout.base_fragment, container, false);

0

ক্রিয়াকলাপ তৈরি করার সময় খণ্ডের লেনদেন করার সময় আমার একই সমস্যা হয়েছিল।

মূল সমস্যাটি হ'ল নিক ইতিমধ্যে ইঙ্গিত করেছে - দৃশ্য গাছটি এখনও ফুলে উঠেনি। তবে তার সমাধান কার্যকর হয়নি - অনারিউম, অনপস্টক্রিয়েট ইত্যাদিতে একই ব্যতিক্রম

সমাধানটি হ'ল এটি প্রস্তুত হওয়ার সময় ধারক খণ্ডগুলিতে কলব্যাক যুক্ত করা:

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

এবং তারপরে ক্রিয়াকলাপে:

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}

0

আমার ক্ষেত্রে, আমি তালিকাভিউ অ্যাডাপ্টারের ক্লাস ঘোষণা করতে একটি টুকরা ক্লাস ফাইলটি ব্যবহার করছিলাম। আমি সবেমাত্র পাবলিক অ্যাডাপ্টার শ্রেণীর জন্য একটি পৃথক ফাইল ব্যবহার করেছি এবং ত্রুটিটি চলে গেছে।




0

আমার একই সমস্যার কারণ এটি হয়েছিল কারণ আমি ক্রিয়াকলাপে ধারক বিন্যাস যুক্ত করার আগে টুকরা যোগ করার চেষ্টা করেছি।


0

কখনও কখনও এটি এমন হয় কারণ আপনি বটমনাভিগেশন ভিউ ব্যবহার করছেন। আপনি যদি নেভিগেশন থেকে কোনও অভিপ্রায় খোলেন এবং সেই ক্রিয়াকলাপে আপনি খণ্ড খোলেন তা বলতে দিন

transaction.replace(R.id.container,new YourFragment());

তারপরে ক্রিয়াকলাপটি আপনি যে ন্যাভিগেশন পদ্ধতিটি ব্যবহার করছেন তা খুঁজে পাবে না।

সমাধান: ক্রিয়াকলাপটিকে খণ্ডে পরিবর্তন করুন এবং আপনার অ্যাপ্লিকেশনটিতে অ্যাডঅনব্যাকস্ট্যাকের সাহায্যে নেভিগেশন হ্যান্ডেল করুন। আপনি যদি জেটপ্যাক নেভিগেশন বাস্তবায়ন করেন তবে আপনার প্রকল্পে খণ্ডগুলি ব্যবহার করুন।


0

আমার ক্ষেত্রে. আমি একজন আছে Activityমাধ্যমে কিছু সঙ্গে Fragmentপুনঃ গুলি কিছু সময় আমি প্রয়োজন Fragmentগুলি যখন

  • ভাষা পরিবর্তন
  • খণ্ড লেআউটের কারও কারও কারও প্রয়োজন নেই বা বিষয়বস্তু পরিবর্তনটি পুনরায় তৈরি করতে হবে
  • অন্যান্য পরিবর্তন
  • আমি সমস্তগুলি সাফ করে দিয়েছি Fragmentএবং সমস্ত nullক্রিয়াকলাপে সেট করেছি তবে খণ্ডটি ইতিমধ্যে নিজেই তৈরি হয়েছে, যদিও এটি হোস্ট অ্যাক্টিভিটি বিন সেট হয়ে গেছে, তাই কল করার আগে ফ্র্যাগমেন্ট ভিউ পরীক্ষা করে তা বাতিল করে দেয়

    উদাহরণ স্বরূপ

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
    Licensed under cc by-sa 3.0 with attribution required.