मेरे पास अवतार नामक एक कस्टम व्यू क्लास है। क्या एक स्थिर कार्य लिखना संभव है कि जब इसे कहा जाता है तो यह उस वर्ग की सभी मौजूदा वस्तुओं को एक विशिष्ट चित्र के लिए बदल देता है?

यहाँ मेरा अवतार वर्ग है

public class Avatar extends RoundedImageView {

private static String avatarURL;
private Context context;

public Avatar(Context context) {
    super(context);
    init();
}

public Avatar(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    init();
}

public Avatar(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.context = context;
    init();
}

private void init(){
    Picasso.with(context).load(avatarURL).into(this);
}

public static void updatePicture(String url){
    avatarURL = url;
    //update all avatars
}

}
0
Adam Katz 26 जिंदा 2017, 22:39

1 उत्तर

सबसे बढ़िया उत्तर

चित्र को अद्यतन करने के लिए आपको अवतार वस्तु के उदाहरण की आवश्यकता होगी। इसका एक तरीका सूची में इसके सभी उदाहरणों को संग्रहित करना होगा।

आपके ऐप क्लास में,

public static List<Avatar> avatarList = new ArrayList();

अवतार वर्ग की अपनी इनिट विधि में:

private void init(){
    App.avatarList.add(this);
    Picasso.with(context).load(avatarURL).into(this);
}

अब आपको इन विचारों को अपनी सूची से भी हटाने की जरूरत है, आप शायद इसे इस तरह से अंतिम रूप दे सकते हैं:

@Override
    protected void finalize() throws Throwable {
        super.finalize();
        App.avatarList.remove(this);
    }

अब प्रत्येक अवतार वस्तु में चित्र बदलने के लिए, सूची के माध्यम से पुनरावृति करें, और अद्यतन विधि को कॉल करें।

1
nipun.birla 26 जिंदा 2017, 23:21
मैंने क्लास को ऑब्जेक्ट ऐरे को होल्ड किया क्योंकि मुझे लगता है कि यह बेहतर है। यह काम कर रहा है, लेकिन मैं इसका बहुत बड़ा प्रशंसक नहीं हूं इसलिए उम्मीद है कि कोई कुछ बेहतर लेकर आएगा। लेकिन धन्यवाद।
 – 
Adam Katz
26 जिंदा 2017, 23:29
अपने दृश्य वस्तुओं के उदाहरणों को दायरे से बाहर रखना कभी भी एक अच्छा विचार नहीं है। तो मैं आपसे पूरी तरह सहमत हूं। लेकिन मैं इसके साथ ही आ सकता था।
 – 
nipun.birla
26 जिंदा 2017, 23:31