2014-12-09 2 views
0

Я создаю пользовательский класс тост называется MyToast:Пользовательские Toast Раздувание - Android

public class MyToast extends Toast { 

    public static final int RED = 0; 
    public static final int BLUE = 1; 

    public MyToast(Context context, String data, int color) { 
     super(context); 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.my_toast, null); 
     setView(layout); 

     TextView tvToast = (TextView) layout.findViewById(R.id.tvToast); 
     tvToast.setText(data); 

     if(color == RED) { 
      tvToast.setBackgroundResource(R.drawable.red_background); 
      tvToast.setTextColor(context.getResources().getColor(R.color.red)); 
     } else { 
      tvToast.setBackgroundResource(R.drawable.blue_background); 
      tvToast.setTextColor(Color.WHITE); 
     } 
    } 
} 

my_toast.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toast_layout_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/tvToast" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</LinearLayout> 

Использование MyToast в MainActivity:

new MyToast(context, getResources().getString(
          R.string.uspesna_najava), MyToast.BLUE).show(); 

Я получаю это предупреждение:

Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)

на этой части кода:

View layout = inflater.inflate(R.layout.my_toast, null); 

Этот код работает хорошо, но я хочу, чтобы избавиться от этого предупреждения. Я знаю, что мне нужно, чтобы раздуть, как это, чтобы избежать этого предупреждения:

View layout = inflater.inflate(R.layout.my_toast, parent, false); 

Но где я могу найти родителей?

В официальном сайте Android Developers, они надувать вид, как это:

LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
    View layout = inflater.inflate(R.layout.my_toast, (ViewGroup) findViewById(R.id.toast_layout_root)); 

Я попытался, как это, но я получаю сообщение об ошибке:

The method findViewById(int) is undefined for the type MyToast

+1

[Как настроить Тост в Android] (http://stackoverflow.com/questions/16909476/ как настроить toost-in-android) –

ответ

0

Конечно, метод findViewById является метод деятельности.

Таким образом, пример кода находится в классе Activity, который вызывает вызов findViewById без проблем.

Поэтому ваш код находится в классе MyToast, вы должны вызвать метод экземпляра деятельности:

((Activity) context).findViewById(R.id.toast_layout_root) 
+0

У меня такая же проблема. Но контекст, который я передаю, - это служба, а не активность. Есть ли другой способ получить метод findViewById? –