2013-05-02 83 views
6

我有這樣的靜態方法:findViewById一個靜態方法

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(); 

} 

但是,我無法弄清楚如何獲得第一findViewById爲它說,這是一個非靜態方法發揮好本。我明白爲什麼會這樣說,但必須有一種解決方法?我將context傳入此方法,但無法一起工作。

+2

您不需要傳遞上下文對象,而是傳遞視圖對象。一個持有你的意見 – edoardotognoni 2013-05-02 15:33:59

+1

爲什麼不只是使視圖類寬變量,並訪問它的方式 – tyczj 2013-05-02 15:34:44

+0

@Wamasa這是正確的答案..信息它 – Pragnani 2013-05-02 15:37:40

回答

6

你可以做的一件事是讓視圖變成一個類變量並使用它。我實際上不建議這樣做,但如果你需要快速和骯髒的東西,它會工作。

將視圖作爲參數傳遞將是首選方式

+0

謝謝,不敢相信我沒有想到這一點。 – KickingLettuce 2013-05-02 15:46:45

2

這有點不可思議。但是你可以傳遞根視圖作爲參數。

//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

如果你想堅持一個靜態方法利用活動的,而不是作爲語境參數做像這樣一個activity.findViewById:

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 

另一種方式來做到這一點是通過父母的ViewGroup作爲參數而不是上下文或活動:

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