2012-12-30 12 views
6

udało mi się zrobić własny tost przy użyciu tego koduandroid niestandardowe grzanki

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

Jednakże, ponieważ nie rozumiem cel LayoutInflater, I zmodyfikowany kod do tego ...

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

I dostać RuntimeException mówiąc "setView musi być nazywany" ..

  • Dlaczego nie mogę po prostu przypisać widok toastowi bez użycia LayoutInflater?

  • Co jest ogólnie celem LayoutInflater, dzięki czemu mogę zastosować to doświadczenie w innych niestandardowych widokach?

Edit: Używam tych kodów w onListItemClick() metody interfejsu .. po zawartość jest ustawiony ..

+0

Myślę, że dobrym pytaniem byłoby "co robi wewnętrznie LayoutInflater"? – Behnam

Odpowiedz

2

Twoje pytanie ma odpowiedź, każdy niestandardowy widok powinien nadmuchać pierwsze, że jest powód wystąpił błąd w zmodyfikowanym kodzie.

+0

jeśli przypisuję przycisk do java z xml, findViewById działa dobrze ... Nie używam żadnego pompera tam .. Po co go tu używać? Czy to dlatego, że 'setContentView' jest już używany raz, a wszelkie dalsze zmiany zawartości powinny pochodzić z ** rozszerzania layoutu **? – BLOB

+0

ponieważ toast jest niestandardowy, a przycisk nie jest (ustawienie domyślne androida). z xml możesz przypisać/zmienić jakąś właściwość przycisku. –

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

To jest to, czego też to zrobił, i to jest kompletny kod rację, masz odpowiedź, Dla przypisać widoku niestandardowego musimy użyć infalte widoku niestandardowego pierwszy.

Dziękujemy

Powiązane problemy