2011-02-15 9 views
7

के साथ मैं पुन: प्रयोज्यता की आशा के साथ कस्टम व्यू पर काम कर रहा हूं। इसमें एक सामान्य प्रकार होना चाहिए, जैसे:एक्सएमएल के लिए कस्टम व्यू जोड़ना ... लेकिन सामान्य प्रकार

public class CustomViewFlipper<someType> extends ViewFlipper { } 

मुझे पता है कि XML फ़ाइल में सामान्य कस्टम दृश्य को कैसे बांधना है। लेकिन मुझे इस स्थिति के लिए कोई उदाहरण नहीं मिला। एक्सएमएल में कक्षा के लिए सामान्य प्रकार को परिभाषित करने का कोई तरीका है?

उत्तर

4

मुझे ऐसा नहीं लगता है, लेकिन आप अपने खुद के उपवर्ग बना सकते हैं:

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType> 

और अपने लेआउट एक्सएमएल में उस वर्ग का उपयोग करें।

+0

मुझे लगता है कि का दृष्टांत, वर्तमान में इस सही जवाब तो यह स्वीकार कर रहा है,। धन्यवाद। – eks

+0

@ कॉमन्सवेयर - क्या आप लेआउट एक्सएमएल में ऑब्जेक्ट को कॉल करने के तरीके पर विस्तार कर सकते हैं? मैंने लॉजिकल '' लेकिन मैंने अपवाद प्राप्त किया है: द्वारा & quot: android.view.InflateException: बाइनरी एक्सएमएल फ़ाइल लाइन # 70: क्लास को बढ़ाने में त्रुटि ... के कारण: java.lang.No.SuchMethodException: [वर्ग android.content.Context, इंटरफ़ेस android.util.AttributeSet] ' – CrimsonX

+0

@CrimsonX: जैसा कि अपवाद इंगित करता है, आपको दो पैरामीटर कन्स्ट्रक्टर 'TheClassYouPutInTheLayoutFile (संदर्भ ctxt, AttributeSet attrs) को लागू करने की आवश्यकता है। '। – CommonsWare

9

जैसा कि टाइप पैरामीटर वास्तव में बाइटकोड में बंद कर दिए जाते हैं, आप क्लास नाम में एक्सएमएल में उपयोग कर सकते हैं जैसे कि यह पैरामीट्रिज्ड नहीं था और फिर इसे जावा कोड में उचित पैरामीरिज्ड प्रकार में डाला गया।

होने वर्ग पर विचार करें:

public class CustomViewFlipper<T extends View> extends ViewFlipper { 

    //... 

और अपनी गतिविधियों लेआउट एक्सएमएल में:

<view 
    class="com.some.package.CustomViewFlipper" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/customFlipper"/> 
तो अपनी गतिविधि में

:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    //... 
    @SuppressWarnings("unchecked") 
    CustomViewFlipper<TextView> customFlipper = 
      (CustomViewFlipper<TextView>) findViewById(R.id.customFlipper); 
-1

मैं इस दृष्टिकोण का उपयोग और यह मेरे लिए काम करता है ।

<com.some.package.CustomViewFlipper 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/customFlipper"/> 

और फिर गतिविधि में, जैसा कि नीचे

CustomViewFlipper<someType> customFlipper = 
     (CustomViewFlipper<someType>) findViewById(R.id.customFlipper) 
संबंधित मुद्दे