2012-12-30 5 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

をこれらのコードを使用しています変更されたコードでエラーが発生しました。

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

これはあなたにもそれをやったことであり、それは完全に右のコードでは、あなたの答えを持って、 アサインカスタムビューのために我々は最初のカスタムビューをinfalte使用する必要があります。

ありがとうございました

関連する問題