2012-12-30 6 views
6

은 내가 LayoutInflater의 목적을 이해하지 않기 때문에,안드로이드 사용자 정의 토스트

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

그러나이 코드를 사용하여 사용자 정의 토스트를 만들 수 있었다, 나는이에 코드를 ... 수정

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

내가 RuntimeException의는 "setView가 호출되어 있어야합니다"라고 말하는 ..

  • 왜 그냥 할 수 없습니다 LayoutInflater을 사용하지 않고보기를 토스트에 지정 하시겠습니까?

  • 이 경험을 다른 사용자 지정보기에 적용 할 수 있도록 일반적으로 LayoutInflater의 목적은 무엇입니까?

편집 : 내가 onListItemClick() 인터페이스 방법 .. 내용이 설정된 후 이러한 코드를 사용하고 있습니다 ..

+0

"내부적으로 LayoutInflater는 무엇을할까요?" – Behnam

답변

2

귀하의 질문 답변, 모든 사용자 지정보기가 그 이유입니다, 첫번째 팽창한다이 수정 된 코드에 오류가 있습니다. 당신은 우리가 먼저 사용자 정의보기를 infalte 사용할 필요가 할당 사용자 정의보기에 대한 답변, 을 가지고

+0

xml에서 Java로 Button을 할당 할 경우 findViewById가 잘 작동합니다 ... 어떤 인플레이터도 사용하지 않습니다 .. 왜 여기에서 사용합니까? 그것은'setContentView'가 이미 한 번 사용되었고 추가 내용 변경은 ** layout inflating **에서 이루어 졌기 때문입니까? 축음기가 사용자 정의이며 버튼이 (기본값은 안드로이드)이기 때문에 – BLOB

+0

입니다. xml을 사용하면 버튼의 일부 속성을 지정하거나 변경할 수 있습니다. –

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

이것은 당신이 또한 그것을 한 일이며, 그것은 완전한 권리 코드입니다.

고맙습니다.

관련 문제