2013-05-02 24 views
6

a: AncakfindViewById Statik Yöntem Bu statik yöntemine sahip

public static void displayLevelUp(int level, Context context) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View layout = inflater.inflate(R.layout.custom_level_coast, 
      (ViewGroup) findViewById(R.id.toast_layout_root)); // this row 

    TextView text = (TextView) layout.findViewById(R.id.toastText); 
    text.setText("This is a custom toast"); 

    Toast toast = new Toast(context); 
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
    toast.setDuration(Toast.LENGTH_LONG); 
    toast.setView(layout); 
    toast.show(); 

    Toast.makeText(context, String.valueOf(level), Toast.LENGTH_SHORT) 
      .show(); 

} 

, ben bunun bir statik olmayan bir yöntemdir söylediği gibi ilk findViewById bu güzel oynamak için nasıl anlamaya olamaz . Bunu neden söylediğini anlıyorum, ama bir çözüm olmalı? Bu yönteme context'u geçtim ama bunları birlikte çalıştıramadım.

+2

ama görünüm nesne olabilir. Görüşlerinize uygun olanı – edoardotognoni

+1

Neden sadece bir sınıf geniş bir değişken yapmak ve bu şekilde erişmek değil – tyczj

+0

@Wamasa Doğru bir cevaptır..post – Pragnani

cevap

6

Yapabileceğiniz tek şey, görünümü sınıfsal bir değişken yapmak ve kullanmak. Bunu yapmayı kesinlikle önermiyorum ama hızlı ve kirli bir şeye ihtiyacınız varsa işe yarayacaktır. bir parametre olarak görünümünde geçen

tercih edilen bir yolu bir bağlam nesnesi geçmesine gerek yoktur

+0

Teşekkürler, bunu düşünmediğime inanamıyorum. – KickingLettuce

2

biraz garip. Ancak root görünümünü parametre olarak geçirebilirsiniz.

//some method... 
ViewGroup root = (ViewGroup) findViewById(R.id.toast_layout_root); 
displayLevelUp(level, context, root); 
//some method end... 


public void displayLevelUp(int level, Context context, ViewGroup root) { 

LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View layout = inflater.inflate(R.layout.custom_level_coast, 
     root); 

TextView text = (TextView) layout.findViewById(R.id.toastText); 
text.setText("This is a custom toast"); 

Toast toast = new Toast(context); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

Toast.makeText(context, String.valueOf(level), Toast.LENGTH_SHORT) 
     .show(); 

} 
1

bunu gibi bir activity.findViewById yerine parametre olarak Bağlamında statik yöntem kullanımı Aktivite ile sopa ve yapılacak isterseniz:

public static void displayLevelUp(int level, Activity activity) { 
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.toastText, (ViewGroup) activity.findViewById(R.id.abs__action_bar_container)); // this row 

o ana ViewGroup geçmektir yapmanın bir başka yolu Bir Bağlam veya Parametre yerine parametre olarak:

public static void displayLevelUp(int level, ViewGroup rootLayout) { 
    View layout = rootLayout.inflate(rootLayout.getContext(), R.layout.custom_level_coast, rootLayout.findViewById(R.id.toast_layout_root)); // this row 
İlgili konular