8

द्वारा बनाए गए टुकड़ों के लिए शून्य लौट रहा है मैं टुकड़ों के बारे में बहुत कुछ पढ़ रहा हूं। अन्य लोगों को टुकड़ों के दृश्य को पुनः प्राप्त करने में समस्याएं आ रही हैं क्योंकि नल हमेशा वापस आ गया था लेकिन कोई जवाब मेरी समस्या का हल नहीं हुआ। मैं जो करने की कोशिश कर रहा हूं वह एक छवि गैलरी बना रहा है। मेरे पास एक टुकड़ा है जिसमें एक छवि दृश्य है। टुकड़े दिखाने के लिए मैं एक android.support.v4.view.ViewPager का उपयोग करता हूं। और ViewPager को खिलाने के लिए मैं android.support.v4.app.FragmentStatePagerAdapter का उपयोग करता हूं।फ्रैगमेंट getView() हमेशा FragmentStatePagerAdapter

समस्या यह है कि जब सब कुछ बनता है और छवियां दिखायी जाती हैं तो मैं वर्तमान दिखाए गए चित्र को डिस्क पर सहेजना चाहता हूं। तो मुझे वर्तमान खंड छविदृश्य प्राप्त करने की आवश्यकता है, लेकिन मैं नहीं कर सकता क्योंकि fragment.getView() हमेशा शून्य है, खंड के साथ जुड़ी गतिविधि भी शून्य है और मैं यह नहीं समझ सकता कि यह क्यों है।

यह मेरा टुकड़ा है:

public class ImageViewURLFragment extends Fragment 
{ 
    String _url; 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
      ViewGroup container, Bundle savedInstanceState) 
    { 
     // The last two arguments ensure LayoutParams are inflated 
     // properly. 
     View rootView = new ImageViewURL(getActivity(), _url); 

     return rootView; 
    } 

    public void setImageURL(String imgURL) 
    { 
     _url=imgURL; 
    } 
} 

और ये मेरे अनुकूलक: यहाँ कुछ कोड है, तो किसी को भी यहाँ मदद कर सकता है देखने के लिए

public class ImageViewURLCustomAdapter extends FragmentStatePagerAdapter 
{ 
    List<String> _urls=new ArrayList<String>(); 

    public ImageViewURLCustomAdapter(FragmentManager fm) 
    { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) 
    { 
     ImageViewURLFragment fragment = new ImageViewURLFragment(); 
     fragment.setImageURL(_urls.get(i)); 

     return fragment; 
    } 

    public String getItemUrl(int i) 
    { 
     return _urls.get(i); 
    } 

    @Override 
    public int getCount() { 
     return _urls.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return "OBJECT " + (position + 1); 
    } 

    public void addImageURL(String url) 
    { 
     _urls.add(url); 
    } 
} 

और यह मुख्य गतिविधि है, साथ टिप्पणी नोटिस प्राप्त करें:

public class MainActivity extends FragmentActivity 
{ 
    ImageViewURLCustomAdapter _iva=null; 
    ViewPager _vp=null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     _iva = new ImageViewURLCustomAdapter(
         getSupportFragmentManager()); 
     _iva.addImageURL("http://upload.wikimedia.org/wikipedia/commons/b/b4/Saturn_(planet)_large.jpg"); 
     _iva.addImageURL("http://planetthreesixty.com/sites/default/files/planet.jpg"); 

     _vp = (ViewPager) findViewById(R.id.viewpager); 
     _vp.setAdapter(_iva); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     if(item.getItemId()==R.id.saveToSD) 
     { 
      int index= _vp.getCurrentItem(); 
      Fragment fragment=_iva.getItem(index); 

      //THis is where I need to get fragment view, but always returns null 
        View view= fragment.getView(); 
      ImageView iv=(ImageView)view.findViewWithTag("imageView"); 
      Bitmap bmp=iv.getDrawingCache(); 


     } 


     return super.onOptionsItemSelected(item); 
    } 
} 

लंबे स्रोतों के लिए खेद है, मैंने जो कुछ भी कर सकता था उसे साफ़ कर दिया है, लेकिन मैं पूर्व सभी खेल भागों भेजा। क्या कोई अनुमान लगा सकता है कि क्या हो रहा है?

अग्रिम धन्यवाद।

उत्तर

31

तो मैं वर्तमान टुकड़ा imageView प्राप्त करने की आवश्यकता है, लेकिन मैं कर सकते हैं क्योंकि न fragment.getView() हमेशा शून्य है, टुकड़ा से संबंधित गतिविधियों अशक्त भी है और मैं समझ नहीं क्यों है यह।

क्योंकि आप Fragment कि ViewPager पेज निर्दिष्ट सूचकांक करने के लिए इसी के लिए उपयोग करता है वापस जाने के लिए _iva.getItem(index); की उम्मीद कर रहे हो रहा है यही कारण है कि

। ऐसा नहीं होगा क्योंकि ViewPager ने getItem विधि को पहले से ही आवश्यक टुकड़ों को प्राप्त करने के लिए कहा है और getItem विधि को कॉल करने के बाद आपको ImageViewURLFragment उदाहरण मिल गया है। यह नया उदाहरण Activity (getActivity() रिटर्न null) से जुड़ा नहीं है और इसका दृश्य नहीं बनाया गया था।

आप उपयोग के रूप में एक FragmentStatePagerAdapter वर्तमान में दृश्यमान Fragment प्राप्त करने के लिए नीचे दिए गए कोड का प्रयास करें:

if (item.getItemId()==R.id.saveToSD) { 
    int index = _vp.getCurrentItem(); 
    Fragment fragment = _vp.getAdapter().instantiateItem(_vp, index); 
    //... 
+0

धन्यवाद इस के लिए एक बहुत। – Notbad

+0

कुछ और जानकारी खोजने के बाद, मैं पूछना चाहता हूं कि आपको तत्काल इटैम के बारे में यह जानकारी कैसे मिली। मेरा मतलब है कि मैंने पढ़ा है कि यह एडाप्टर प्रत्येक बार एक नया निर्माण करने के बजाय टुकड़ों का पुन: उपयोग कर सकता है, लेकिन आपको वह जानकारी कहाँ मिली जो हम कर सकते थे तुरंत तत्काल कॉल करें और यह खंड के पिछले उदाहरण को वापस कर देगा, न कि नया? और दूसरी तरफ आप पेजव्यू के लिए यह कैसे करेंगे (वर्तमान आइटम प्राप्त करें)? अग्रिम में धन्यवाद। – Notbad

+1

@Notbad यदि आप 'FragmentStatePagerAdapter' के लिए स्रोत कोड देखते हैं तो आप देखेंगे कि 'instantiateItem' विधि या तो एक कैश्ड टुकड़ा या एक नया टुकड़ा वापस कर देगा। इस मामले में जब आप वर्तमान खंड की तलाश में हैं तो यह कैश संस्करण होगा। * और दूसरी तरफ आप पेजव्यू के लिए यह कैसे करेंगे (वर्तमान आइटम प्राप्त करें)? * - मुझे समझ में नहीं आता कि आप क्या पूछ रहे हैं। FragmentStatePagerAdapter से वर्तमान खंड प्राप्त करने के लिए आप उत्तर से मेरे कोड का उपयोग करेंगे। – Luksprog

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