2013-05-02 15 views
6

ho questo metodo statico:findViewById all'interno di un metodo statico

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

} 

Tuttavia, non riesco a capire come ottenere il primo findViewById di bel gioco con questo come si dice che è un metodo non statico . Capisco perché lo dice, ma ci deve essere una soluzione alternativa? Ho passato context in questo metodo ma non sono riuscito a risolverli insieme.

+2

Non è necessario passare un oggetto di contesto, ma una sottofinestra. Quello che regge le tue opinioni – edoardotognoni

+1

Perché non basta rendere la vista una variabile di classe e accedervi in ​​questo modo – tyczj

+0

@Wamasa Questa è la risposta giusta..post it – Pragnani

risposta

6

Una cosa che puoi fare è rendere la vista una variabile di classe e usarla. In realtà non lo raccomando, ma funzionerà se hai bisogno di qualcosa di veloce e sporco.

Passando nella vista come parametro sarebbe il modo preferito

+0

Grazie, non posso credere di non aver pensato a questo. – KickingLettuce

2

è un po 'strano. Ma puoi passare la vista radice come parametro.

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

Se si vuole attaccare con un metodo statico uso di attività, invece di Context come parametro e fare un activity.findViewById in questo modo:

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 

Un altro modo per farlo è quello di passare il ViewGroup genitore come parametro invece di un contesto o attività:

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 
Problemi correlati