28

मैं एक FragmentDialog दिखाने के लिए कोशिश कर रहा हूं (एक दृश्य पदानुक्रम में सामग्री के रूप में नहीं जोड़ा गया एक संवाद के रूप में दिखाया गया है और दिखाया गया है) जहां एक ViewPager है जिसका सामग्री FragmentPagerAdapter द्वारा दिया गया है (एक छवि युक्त टुकड़े प्रदान करता है)।एक संवादप्रवाह के अंदर ViewPager + FragmentPagerAdapter "IllegalArgumentException: कोई दृश्य नहीं मिला ..."

कोड सही काम करता है जब एक FragmentActivity से ViewPager + FragmentPagerAdapter दिखा रहा है, लेकिन निम्न अपवाद प्राप्त जब यह एक FragmentDialog से कर रही है:

"IllegalArgumentException: नहीं दृश्य टुकड़ा SimpleFragment के लिए आईडी 0x7f040077 के लिए मिला ..."

यहां मेरा कोड है:

एक शेरलॉक फ्रैगमेंट एक्टिविटी एक बटन के साथ संवाद बनाने और दिखाने के लिए।

public class BorrameActivity extends SherlockFragmentActivity{ 
    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.one_act); 

    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View arg0) { 
      showTheDialog(); 

     }}); 
    } 

    private void showTheDialog(){ 
     AchGalleryDialog newFragment = AchGalleryDialog.newInstance(achs); 
     newFragment.show(getSupportFragmentManager(), "dialog"); 
    } 

FragmentDialog:

@Override 
public Fragment getItem(int position) { 
    return MySimpleFragment.newInstance(images[position]); 

} 

और अंत में SimpleFragment:

public class AchGalleryDialog extends DialogFragment{ 
    public AchGalleryDialog(){ 
} 

    public static AchGalleryDialog newInstance(){  
     AchGalleryDialog f = new AchGalleryDialog(); 
     return f;  
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

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

     View view = inflater.inflate(R.layout.dialog_user_result, container); 
     getDialog().setTitle("Hola tronco"); 

     //content to show in the fragments 
     int[] images = new int[]{R.drawable.d1, R.drawable.d2, R.drawable.d3}; 

     ViewPager pager = (ViewPager) view.findViewById(R.id.pager); 
     MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images); 
     pager.setAdapter(adapter); 

     return view; 
    } 
} 

यह बहुत ही सरल MyFragmentPagerAdapter है, मैं केवल GetItem() विधि, और nullPointer चेकों डाल

public class SimpleFragment extends Fragment{ 
    int id; 
    public static SimpleAchFragment newInstance(int imgId){ 
     SimpleFragment f = new SimpleFragment(); 
     Bundle args = new Bundle(); 
     args.putLong(ID_BUNDLE, imgId); 
     f.setArguments(args); 

     return f; 
    } 

    public SimpleAchFragment(){ 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.id = getArguments() != null ? getArguments().getInt(ID_BUNDLE) : 0;  
    } 

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

    // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.simple_fragment, container, false); 
     FragmentActivity mAct = getActivity(); 

     ImageView img = (ImageView) v.findViewById(R.id.image); 
     img.setImageDrawable(mAct.getResources().getDrawable(id)); 

     return v; 
    } 

} 

अधिक जानकारी, यदि एडाप्टर (3 इन्ट्स के साथ एक इंट सरणी) में गुजरने वाली सामग्री लंबाई शून्य है, तो एडाप्टर कोई भी टुकड़ा बनाने की कोशिश नहीं करता है, इसलिए संवाद सही तरीके से दिखाई देते हैं लेकिन खाली (अपेक्षित)। फुफ्फुस के समय SimpleFragment.onCreateView() पर अपवाद फेंक दिया गया है। अपवाद में संदर्भित आईडी (जैसा नहीं मिला) ViewPager की आईडी से मेल खाता है, जिसे R.layout.simple_fragment में ठीक से परिभाषित किया गया है।

मैंने संवाद को AlertDialog.builder के साथ और डायलॉग() कन्स्ट्रक्टर के साथ सीधे बनाने का भी प्रयास किया है, लेकिन वही व्यवहार प्राप्त करें। वर्ग में

MyFragmentAdapter adapter = new MyFragmentAdapter(getChildFragmentManager(),images); 

MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images); 
इस वजह से

के बजाय

AchGalleryDialog:

+0

मुझे एक ही समस्या है ... क्या आपको कोई कामकाज मिला? – brk3

उत्तर

63

इस प्रयास करें

http://developer.android.com/about/versions/android-4.2.html#NestedFragments

आशा है कि इससे मदद मिलेगी!

+1

यह काम करता है !! बहुत - बहुत धन्यवाद। – brk3

+0

धन्यवाद 70s कमांडर, यह महान मैं इस मुद्दे के साथ बन गया, नए एसडीके की तुलना में कुछ दिन पहले – juanmeanwhile

+1

नहीं आया, समस्या ... यहां एक ही समस्या है और यह पोस्ट देखा है। – 70sCommander

संबंधित मुद्दे