2011-07-12 23 views
5

मैंने इस मुद्दे को हल करने के लिए सचमुच दो दिन बिताए हैं। अगर कोई मदद कर सकता है तो मैं बड़े पैमाने पर सराहना करता हूं।प्रत्येक पंक्ति में दो बटनों के साथ कस्टम सूचीदृश्य

क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ:

एक ListView, जिससे खिलाड़ी (खिलाड़ी के नाम के लिए) एक पाठ क्षेत्र के माध्यम से नई प्रविष्टियां (खिलाड़ी), जोड़ सकते हैं है, और फिर एक बटन सबमिट करें। ListView के प्रत्येक फ़ील्ड में, मैं प्लेयर का नाम प्रदर्शित करता हूं, और फिर दो छविबटन। एक पुरुष प्रतीक के साथ, और एक मादा प्रतीक के साथ एक। नर प्रतीक डिफ़ॉल्ट रूप से टॉगल किया जाता है, और उपयोगकर्ता पुरुष बटन या मादा बटन को टॉगल करके खिलाड़ी को नर या मादा के रूप में सेट कर सकता है। आखिरकार, जब उपयोगकर्ता अगली स्क्रीन (एक नई गतिविधि) पर जाता है, तो एप्लिकेशन प्लेयर के नाम और संलग्न सेक्स को कुछ प्रकार के स्टोरेज में सहेज लेगा और अगली गतिविधि पर आगे बढ़ेगा।

मैं क्या हासिल किया है:

मैं एक साधारण सरणी एडाप्टर, जो खिलाड़ी सूची में एक नया खिलाड़ी नाम जोड़ने की बात है, मैं इस पर notifyDataSetChanged चलाने() की है। एडाप्टर भी एक कस्टम पंक्ति लेआउट फ़ाइल का उपयोग करने के लिए सेट है। लेआउट फ़ाइल के अंदर, ऐसा लगता है:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    <RelativeLayout android:layout_height="wrap_content" 
     android:layout_width="fill_parent" android:id="@+id/relativeLayout1" android:layout_marginTop="5dp"> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:id="@+id/playerName" 
      android:layout_centerVertical="true" android:text="Derp" android:textStyle="bold" android:layout_marginLeft="5dp" android:textSize="22dp" android:textColor="@color/male_blue"></TextView> 
     <ImageButton android:layout_height="60dp" 
      android:layout_width="60dp" android:onClick="maleClickHandler" 
      android:src="@drawable/male_icon_settings" android:id="@+id/buttonA" android:layout_alignParentRight="true" android:layout_marginRight="65dp"></ImageButton> 
     <ImageButton android:onClick="femaleClickHandler" 
      android:layout_height="60dp" android:layout_width="60dp" android:id="@+id/buttonB" 
      android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:src="@drawable/female_icon_settings"></ImageButton> 
    </RelativeLayout> 
</LinearLayout> 

प्रत्येक पंक्ति पर दो बटन कक्षा फ़ाइल में विधियों के संदर्भ में हैं।

public void maleClickHandler(View v) { 

     RelativeLayout vwParentRow = (RelativeLayout) v.getParent(); 
     ImageButton maleButton = (ImageButton) vwParentRow.getChildAt(1); 
     maleButton.setImageDrawable(getResources().getDrawable(
       R.drawable.male_icon_selected)); 
     vwParentRow.refreshDrawableState(); 
    } 

    public void femaleClickHandler(View v) { 

     RelativeLayout vwParentRow = (RelativeLayout) v.getParent(); 
     ImageButton femaleButton = (ImageButton) vwParentRow.getChildAt(2); 
     femaleButton.setImageDrawable(getResources().getDrawable(
       R.drawable.female_icon_selected)); 
     vwParentRow.refreshDrawableState(); 
    } 

मैं अभी तक इन दो बटन के बीच कोई अंतर-कनेक्टिविटी लागू नहीं किया है, केवल एक एक समय में सक्रिय होने के लिए या करने के लिए भी अनटॉगल एक, के बाद से मैं मुझे लगता है कि अनुमति देने के लिए,: यहाँ इस के लिए मेरे कोड है गलत दृष्टिकोण पूरी तरह से ले जा रहा है।

समस्या:

सूची में नए प्रविष्टियों को जोड़ने पर, बाद एक टॉगल और/या अन्य पुरुष/महिला बटन, बातें सच में गाड़ी मिलता है, और पुरुष/महिला टॉगल आइकन ले सकता है जैसा कि इसे संलग्न प्लेयर स्ट्रिंग के साथ, या अधिक संभावना है, उन टॉगल किए गए लोग उस पहली पंक्ति (सूची की सरणी स्थिति 0) पर रहेंगे, या यहां तक ​​कि दूसरी सूची स्थिति में भी जाएं, और स्वयं को पंक्ति पर टॉगल के रूप में कॉपी करें ऊपर।

आप कैसे मदद कर सकते हैं ...?

मैं एमुलेटर से अपनी स्क्रीन की नीचे एक छवि संलग्न किया है, मदद करने के लिए मेरे सुझाव स्पष्ट Screenshot!

मुझे लगता है कि मैं कस्टम एडाप्टर के कुछ फार्म का उपयोग करना पड़ सकता है, मैंने इस विषय पर बहुत कुछ पढ़ा है, लेकिन मैं जो कुछ हासिल करने की कोशिश कर रहा हूं उसके लिए मुझे कुछ भी प्रासंगिक नहीं मिल रहा है, इसलिए यदि आप मुझे सही दिशा में इंगित कर सकते हैं, या यहां तक ​​कि इसे सबसे बुनियादी समाधान भी कोशिश कर सकते हैं समस्या का प्रकार, मैं बहुत आभारी होंगे।

अंत में, जब मुझे यह काम मिल जाए, तो किस प्रकार का भंडारण खिलाड़ी नामों और उनके लिंग को संग्रहीत करने के लिए सबसे अच्छा होगा? मैं चाहता हूं कि उपयोगकर्ता एप्लिकेशन छोड़ने के बाद प्लेयर सूची को रखने में सक्षम हो और इसे पुनरारंभ करें।

किसी भी मदद के लिए धन्यवाद! :)

उत्तर

1

आपको एक कस्टम एडाप्टर का उपयोग करने की आवश्यकता होगी, जो स्वयं में प्रत्येक प्रविष्टि के लिए नर/मादा ध्वज को ट्रैक करने में सक्षम होना चाहिए।

आपकी विधि काम नहीं करेगी क्योंकि बटन की स्थिति एडाप्टर की getView विधि द्वारा प्रबंधित की जाती है। भले ही आप बच्चों के माध्यम से खुदाई करके उन्हें बदल दें, अगली बार जब GetView विधि कहलाती है, तो यह चीजों को गड़बड़ कर रही है।

+0

धन्यवाद, मुझे संदेह है कि मुझे इन पंक्तियों के साथ कुछ करना है; इस खूबसूरती से स्पष्टीकरण के लिए धन्यवाद :) –

1

इनमें से बहुत से इस बात पर निर्भर करता है कि आप अपने गेम में कितने खिलाड़ी हैं। यदि यह एक संख्या है जो एक स्क्रीन पर फिट हो सकती है (या इसके बहुत करीब), ListView वास्तव में अनावश्यक है। ListView एस और एडाप्टर वास्तव में एक सुविधा विधि नहीं हैं जितना कि वे प्रदर्शन को बेहतर बनाने के लिए एक उपकरण हैं। जब आप स्क्रॉल करते हैं तो वे केवल नई पंक्तियों के लिए स्क्रीन पर क्या हैं और रीसायकल पुराने, पहले से प्रदर्शित View एस को याद करते हैं - यही कारण है कि आपके कुछ बटन राज्यों को विभिन्न पंक्तियों में कॉपी किया जा रहा है।

  • आप एक कस्टम खुद एडाप्टर कुमार बिबेक पता चलता है के रूप में लिख सकते हैं:

    आप इसे ठीक कर सकता है कई तरीकों से कर रहे हैं। इस एडाप्टर में, आप getView() विधि को ओवरराइड करना चाहते हैं ताकि यह सुनिश्चित किया जा सके कि विधि के प्रत्येक बार प्रत्येक बटन में सही स्थिति हो।

  • यदि आप ListView का उपयोग करके वारंट के लिए पर्याप्त डेटा नहीं रखते हैं तो आप आसानी से ScrollView अपने कुछ पंक्तियों के साथ पॉप्युलेट कर सकते हैं। इस तरह आपको अपनी पंक्तियों को पुनर्नवीनीकरण और बटन राज्यों के बारे में चिंता करने की आवश्यकता नहीं होगी।

इसके अलावा, आप लिंग चयनकर्ता के लिए एक RadioGroup का उपयोग कर (मैं रेडियो बटन के लिए एक बेहतर उपयोग की सोच भी नहीं सकते क्योंकि वे परस्पर अनन्य होना करने के लिए बनाया जाता है) में देखना चाहते हो सकता है।

इसके अलावा, आपकी पंक्ति में बाहरी LinearLayout एक्सएमएल फ़ाइल अनावश्यक दिखती है।

जहां तक ​​स्टोरेज है, आप या तो SQLite डेटाबेस या SharedPreferences का उपयोग कर सकते हैं। SharedPreferences को कोई सेटअप की आवश्यकता नहीं है, लेकिन मुझे लगता है कि SQLite डेटाबेस आपकी आवश्यकताओं के लिए अधिक उपयुक्त है।

+0

आपको बहुत धन्यवाद, मुझे लगता है कि मैं रेडियो ग्रुप और स्क्रॉलव्यू के साथ आपकी सलाह लेता हूं। बहुत बहुत धन्यवाद! : डी –

+0

आपका बहुत स्वागत है। जब आपको कोई उत्तर मिलता है जो आपको संतुष्ट करता है, तो आपको इसके आगे खाली चेकमार्क पर क्लिक करके इसे सही उत्तर के रूप में चिह्नित करना चाहिए। एक बार जब आप कुछ प्रश्न पूछ लेंगे, तो आपका "स्वीकृति प्रतिशत" आपके उपयोगकर्ता बैज में दिखाई देगा, और एक उच्च प्रतिशत अन्य लोगों को आपको गुणवत्ता के उत्तर प्रदान करने के लिए प्रोत्साहित करेगा। :) –

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