मैं एक 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:
मुझे एक ही समस्या है ... क्या आपको कोई कामकाज मिला? – brk3