6

このコードを使ってカスタムトーストを作ることができました

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

しかし、目的がわからないのでLayoutInflater、コードをこれに変更しました...

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

そして、「setViewが呼び出されたに違いない」というRuntimeExceptionが発生します。

  • 使用せずにビューをトーストに割り当てることができないのはなぜLayoutInflaterですか?

  • LayoutInflaterこのエクスペリエンスを他のカスタムビューに適用できるようにするための一般的な目的は何ですか?

編集:onListItemClick()コンテンツが設定された後、インターフェイスメソッド でこれらのコードを使用しています。

4

2 に答える 2

2

あなたの質問にはあなたの答えがあります、すべてのカスタムビューは最初に膨らまなければなりません、それがあなたがあなたの修正されたコードでエラーを得た理由です。

于 2012-12-30T08:35:11.407 に答える
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();

これはあなたもそれをしたことであり、それは完全に正しいコードです、あなたはあなたの答えを持っています、カスタムビューを割り当てるために私たちは最初にカスタムビューを使用する必要があります。

ありがとうございました

于 2012-12-30T08:37:43.547 に答える