2011-06-27 5 views
15

मैं संगतता लाइब्रेरी का उपयोग कर एक मौजूदा ऐप को फ्रैगमेंट एपीआई में परिवर्तित कर रहा हूं। मैंने पढ़ा है कि आप कक्षाओं को अद्यतन करना चाहते हैं जो अब गतिविधि को विस्तारित करने के लिए गतिविधि का विस्तार करते हैं। यह ज्यादातर मामलों के लिए ठीक है, लेकिन कक्षाओं के बारे में क्या है जो ListActivity या MapActivity का विस्तार करते हैं? इसे संभालने का पसंदीदा तरीका क्या है? मैं उम्मीद कर रहा था कि एक सूचीफलक गतिविधि या उन पंक्तियों के साथ कुछ था, लेकिन मुझे एक नहीं दिखाई देता है।संगतता लाइब्रेरी का उपयोग करके टुकड़ों में कनवर्ट करते समय ListActivity/MapActivity के बारे में क्या करना है?

उत्तर

5
वहाँ

एक ListFragment है: http://developer.android.com/reference/android/app/ListFragment.html

MapActivity के लिए, दुर्भाग्य से आपको लगता है कि उपयोग करने के लिए जारी रखने के लिए की आवश्यकता होगी; इसके लिए कोई फ्रेगमेंट एपीआई नहीं है।

+2

धन्यवाद, लेकिन ListFragment एक FragmentActivity नहीं है, इसलिए मैं अपने विरासत संरचना है कि एक FragmentActivity उम्मीद के साथ मुद्दों कर रहा हूँ। जितना अधिक मैं इस पर काम करता हूं, उतना ही ऐसा लगता है कि इसे कुल प्रकार की पुनर्लेख की आवश्यकता होगी, न केवल क्लास प्रकारों को अपडेट करना और Google द्वारा किए गए मामूली समायोजन। – CACuzcatlan

+2

@CACuzcatlan: आपको एक लिंक उद्धृत करने के लिए आपका स्वागत है जहां "Google" "दावा किया गया" कि आपको केवल "वर्ग प्रकारों और मामूली समायोजनों को अपडेट करना" होगा। ऐसा कहा जा रहा है कि 'ListActivity' को' ListFragment' में परिवर्तित करना बहुत सरल है, अधिकांश गतिविधि-> खंड माइग्रेशन, IMHO से सरल है। – CommonsWare

+0

क्षमा करें, मैं अतिरंजित हूं। मुझे कहना चाहिए कि मुझे मिली इंप्रेशन थी। – CACuzcatlan

8

कम से कम ListActivity के लिए आप इसे FragmentActivity (फिर भी OnItemCLickListener को लागू करने) को बदल सकते हैं और बदल देते हैं:

lv = getListView() एल.वी. = (ListView) findViewById (R.id.your_list_view_id)

और

setListAdapter lv.setAdapter को (favAdapter) (अनुकूलक)

+2

यदि आपकी ListView की आईडी '@ है एंड्रॉइड: आईडी/सूची', आप यह कर सकते हैं: 'ListView lv = (ListView) findViewById (android.R.id.list); '। आप 'lv.setOnItemClickListener (नई ListView.OnItemClickListener() {...' – bmaupin

+1

के साथ 'onListItemClick() 'को प्रतिस्थापित करना भी चाहेंगे, मैंने इसे @bmaupin के उत्तर पर भी टिप्पणी की, लेकिन क्या हम केवल" getListView "() "वह रिटर्न" (ListView) findViewById (R.id.your_list_view_id) "और" setListAdapter (एडाप्टर) "जो" getListView()। setAdapter (एडाप्टर) "उन चीज़ों का ख्याल रखने के लिए करता है या यह काम नहीं करेगा? – ankushg

+0

@Ankush जो भी काम करेगा। जब भी आप getListView() को कॉल करते हैं, तो आप दृश्य पदानुक्रम खोज रहे होंगे, हालांकि यह मामूली कम कुशल है। –

12

यह वह जगह है कि मुझे क्या करना है जब टुकड़े एपीआई के लिए एक ListActivity परिवर्तित:

  1. lv = (ListView) findViewById(android.R.id.list);

  2. साथ lv = getListView(); बदलें lv.setAdapter(adapter);

  3. साथ setListAdapter(adapter); बदलें आप onListItemClick() ओवरराइड किया है, lv.setOnItemClickListener(new ListView.OnItemClickListener() {...

  4. साथ बदलें आप खाली दृश्य सेट करना होगा (कि शो जब कोई परिणाम नहीं होते हैं) मैन्युअल रूप से: lv.setEmptyView(findViewById(android.R.id.empty));

    मैं CursorLoader उपयोग कर रहा हूँ, मैं आम तौर पर इस onLoadFinished() में डाल दिया:

    // if there are no results 
    if (data.getCount() == 0) { 
        // let the user know 
        lv.setEmptyView(findViewById(android.R.id.empty)); 
    } else { 
        // otherwise clear it, so it won't flash in between cursor loads 
        lv.setEmptyView(null); 
    } 
    
  5. cursor loaders का भाषण, मैं भी गतिविधि CursorLoader उपयोग करने के लिए बदल देंगे, यदि वह पहले उस बिंदु

    द्वारा नहीं है
+1

क्या केवल एक नई विधि getListView() को FragmentActivity में जोड़ने के लिए पर्याप्त है जो ListView को वापस कर देता है और फिर उस गतिविधि पर setAdapter (एडाप्टर) नामक एक और विधि सेट करें ADADapter (एडाप्टर)? – ankushg

+0

आपका समाधान पूरी तरह से काम करता है, thx 4 इसे साझा करता है! – vinidog

+0

@Ankush जो भी काम करेगा। आप खोज करेंगे जब भी आप getListView() को कॉल करते हैं तो व्यू पदानुक्रम देखें, हालांकि, जो मामूली कम कुशल है। –

0

ListActivity को FragmentActivity में परिवर्तित करना संभव है।

  1. , android:id="@+id/your_activity_list_view"
  2. अपनी गतिविधि का onCreate में के साथ एक खाली ListView साथ FragmentActivity के बजाय ListActivity
  3. बनाएं res/layout/your_activity.xml बढ़ाएँ setContentView(R.layout.your_activity);
  4. इसके अलावा अपने गतिविधि के onCreate बदलने स्पष्ट रूप से सिर्फ ListView आप पुनः प्राप्त करने के फुलाया

ListView lv = (ListView) findViewById(R.id.your_activity_list_view); 
lv.setAdapter(adapter); 
lv.setOnItemClickListener(this);