2012-12-30 8 views
6

konnte ich benutzerdefinierten Toast mit diesem Codeandroid individuelle Toasts

LayoutInflater inflater = getLayoutInflater(); 

    View layout = inflater.inflate(R.layout.custom_toast_layout, (ViewGroup)findViewById(R.id.custom_toast)); 

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

    Toast toast = new Toast(getApplicationContext());  
    toast.setDuration(Toast.LENGTH_LONG); 
    toast.setView(layout); 
    toast.show(); 

jedoch machen, da ich den Zweck des LayoutInflater nicht verstehen, modifizierte ich den Code zu diesem ...

Toast toast = new Toast(getApplicationContext()); 
    toast.setView(findViewById(R.id.custom_toast)); 
    toast.setDuration(Toast.LENGTH_SHORT); 
    toast.show(); 

Und ich bekomme Runtime sagen „setView muss aufgerufen worden sein“ ..

  • Warum kann ich nicht einfach Weisen Sie die Ansicht Toast ohne Verwendung von LayoutInflater zu?

  • Was ist der Zweck von LayoutInflater im Allgemeinen, damit ich diese Erfahrung auf andere benutzerdefinierte Ansichten anwenden kann?

Edit: ich diese Codes in onListItemClick() Interface-Methode verwende .. nachdem der Inhalt festgelegt ist ..

+0

Ich denke, eine gute Frage wäre "was macht ein LayoutInflater intern"? – Behnam

Antwort

2

Ihre Frage haben Sie Ihre Antwort sollte jede benutzerdefinierte Ansicht zuerst aufzublasen, das ist der Grund, Sie haben einen Fehler mit Ihrem geänderten Code erhalten.

+0

Wenn ich Java einen Button aus xml zuweise, funktioniert findViewById gut ... Ich benutze dort keinen Inflater. Warum hier verwenden? Liegt es daran, dass 'setContentView' bereits einmal verwendet wird und weitere Inhaltsänderungen vom ** Layout-inflationieren ** stammen sollten? – BLOB

+0

weil der Toast benutzerdefiniert ist und die Schaltfläche nicht (Android-Standard) ist. Mit dem XML können Sie eine Eigenschaft der Schaltfläche zuweisen/ändern. –

1
LayoutInflater inflater = getLayoutInflater(); 
View layout = inflater.inflate(R.layout.custom_toast, 
           (ViewGroup) findViewById(R.id.toast_layout_root)); 

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

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

Dies ist, was Sie tun es auch, und es ist komplett richtiger Code, haben Sie Ihre Antwort, Für assign benutzerdefinierte Ansicht wir zuerst die benutzerdefinierten Ansicht verwenden infalte haben.

Vielen Dank