2012-10-29 18 views
37

Görünümü veya İçeriği FindViewById() almak istiyorum? Ya da niyetinden mi?android - İçerikten nasıl görünüm alınır?

Yayın alıcımda belirli bir görünüme ulaşmaya çalışıyorum ve onReceive parametresi bağlam ve amaçtır.

Eh, bir sınıfım var ve bunun içinde yayın alıcım var. Şimdi, yayın alıcısını ondan ayırmaya çalışıyorum, ama bir yoluna ihtiyacım var, böylece sınıfımdaki ayrık yayın alıcım sınıfından gelen görüşler ile iletişim kurabiliyorum.

Teşekkürler.

View view = View.inflate(context, R.layout.ROOT_LAYOUT, null); 

Artık aracılığıyla görüşlerini erişebilirsiniz: yayın alıcısı olarak

cevap

5

Eğer findViewByid() ile bu kök düzeni tüm görüşlerinizi bulmak sonra XML kaynaktan enflasyon üzerinden bir kök düzeni bir görünüme ulaşmak ve olabilir 'görünümü' ve görüntüleme türüne onları döküm:

myImage = (ImageView) view.findViewById(R.id.my_image); 
+0

Ne olmalı ben kök parametresi üzerine yerleştirilen:

private ClassicSingleton cs = ClassicSingleton.getInstance(); 

Ve sigara etkinlik sınıfında

? – lorraine

+0

kök parametresi, şişirilmiş hiyerarşinin kök görünümüdür. Yukarıdaki örnekte zaten kök olan bir görünümü nasıl şişireceğimi gösterdim, bu nedenle bu parametreyi yanlış tutabilirsiniz. Şişirilmiş görünümünüz kök değilse, kök görünümünüzü üçüncü bir parametre olarak yerleştirirsiniz. –

+3

Bu, "false" yerine "null" olmamalı mı? – Roberto

43

bağlamında başlayarak, ilişkili etkinliğin kök görünümü

View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content); 
ederek bulunabilmektedir gibi bir şey bakmak istiyorum Ham Android'de

: Bu

View v = rootView.findViewById(R.id.your_view_id); 
+3

"Görünüm v = rootView.findViewById (R.id.your_view_id);" - Görünüm v = (Görünüm) rootView.findViewById (R.id.your_view_id); ve _View_ sınıfı, herhangi bir türetilmiş Görünüm sınıfı olabilir. –

+1

Bunu denediğimde "Cause by: java.lang.ClassCastException: android.app.Application, android.app.Activity için kullanılamaz" alıyorum. – drynyn

+2

@drynyn bunun nedeni, bu örneğin, bir İçerik için bir Etkinlik kabul edildiğini varsaymasıdır, bu güvenli bir varsayım değildir. Oyuncunun gerçekleştirmek için güvenli olup olmadığını kontrol etmek için instanceof anahtar sözcüğünü kullanabilirsiniz. (google "instanceof java" örnekleri). – eimmer

1

ilk kullanımda

View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content) 

Sonra sadece çağrı findViewById bu:

LayoutInflater inflater = (LayoutInflater) Read_file.this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Read file is current activity in which you want your context. 

View layout = inflater.inflate(R.layout.your_layout_name,(ViewGroup)findViewById(R.id.layout_name_id)); 

o zaman bunu kullanabilirsiniz düzende herhangi bir öğe bulmak için.

TextView textView = (TextView) ((Activity) context).findViewById(R.id.textView1); 
41

? etkinlik sınıfında Sonra

import android.content.Context; 


public class ClassicSingleton { 
    private Context c=null; 
    private static ClassicSingleton instance = null; 
    protected ClassicSingleton() 
    { 
     // Exists only to defeat instantiation. 
    } 
    public void setContext(Context ctx) 
    { 
    c=ctx; 
    } 
    public Context getContext() 
    { 
     return c; 
    } 
    public static ClassicSingleton getInstance() 
    { 
     if(instance == null) { 
      instance = new ClassicSingleton(); 
     } 
     return instance; 
    } 
} 

:

ClassicSingleton cs= ClassicSingleton.getInstance(); 
     Context c=cs.getContext(); 
     ImageView imageView = (ImageView) ((Activity)c).findViewById(R.id.imageView1); 
+3

İyi cevap. Bunu yapmanın 2015 yolu bu, yukarıdaki yol çok gereksiz görünüyor. –

0

Neden sadece a tek kullanmayın: Herhangi TextView'un bulabilirsiniz Örneğin

ImageView myImage = (ImageView) layout.findViewById(R.id.my_image); 
İlgili konular