2009-12-07 21 views
9

मान लें कि मेरे पास विजेट के लिए दो लेआउट हैं: लेआउट 1 और लेआउट 2। विजेट के लिए डिफ़ॉल्ट लेआउट 1 है, लेकिन मैं उपयोगकर्ता को चुनने की अनुमति देता है जो वे विजेट चाहते हैं। तो यदि उपयोगकर्ता लेआउट 2 में बदलता है, तो मैं लेआउट 2 में लेआउट को प्रोग्रामेटिक रूप से कैसे बदलूं?बदलते विजेट लेआउट प्रोग्रामेटिक

क्रियाकलापों के लिए विजेट्स के लिए सेटकंटेंट व्यू विधि नहीं है।

धन्यवाद

उत्तर

8

जब आप अपना रिमोट व्यू बना रहे हैं तो आपको लेआउट चुनना होगा। मेरे विजेट कोड में:

public static RemoteViews buildUpdate(Context context, String action) { 
    RemoteViews updateViews;    
    SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0); 
    String typeface = prefs.getString("typeface", "sans"); 
    int layoutId = R.layout.widget_sans; 
    if ("monospace".equals(typeface)){ 
     layoutId = R.layout.widget_mono; 
    } else if ("serif".equals(typeface)){ 
     layoutId = R.layout.widget_serif; 
    } 
    updateViews = new RemoteViews(context.getPackageName(), 
     layoutId); 
    //actually do things here 
    //then finally, return our remoteView 
    AppWidgetManager.getInstance(context).updateAppWidget(
     new ComponentName(context, FuzzyWidget.class), updateViews); 

} 
+0

तो यह layoutID है कि मैं जरूरत है? मैंने देखा कि updateAppWidget विधि इसका उपयोग नहीं करती है। –

+0

क्षमा करें - मुझे एक पंक्ति याद आई; तय है कि। UpdateAppWidget को पास करने के लिए आपको पैकेज नाम और लेआउट आईडी के साथ एक नया रिमोट व्यू बनाना है। –

2

धन्यवाद योनी।

बस अपने कोड में जोड़ना चाहते थे। रिमोट व्यू ऑब्जेक्ट प्राप्त करते समय, आप संदर्भ और लेआउट आईडी निर्दिष्ट करते हैं। यह वह जगह है जहां आप सेट करते हैं कि आप कौन सा लेआउट दिखाना चाहते हैं।

उदाहरण के लिए ...

RemoteViews views = null; 

if (1 == 1) 
     views = new RemoteViews(m_context.getPackageName(), R.layout.Layout1); 
else 
     views = new RemoteViews(m_context.getPackageName(), R.layout.Layout2); 

AppWidgetManager.getInstance(context).updateAppWidget(
    new ComponentName(context, FuzzyWidget.class), views); 
+2

सही। क्षमा करें, मैंने अपने कोड से कॉपी करते समय गलती से कुछ लाइनों को नियुक्त किया। तय है कि ऊपर। –

+0

@YoniSamlan मैं सफलतापूर्वक लेआउट बदलता हूं लेकिन परिवर्तन लेआउट विजेट के बाद काम नहीं करता ... – Prashant09

+0

@ प्रशांत 0 9 स्विथ केस का उपयोग करें – Ranjit

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