2016-10-12 7 views
-1

Структура моего проекта заключается в следующей: активности - Фрагмент - КлассКак назвать тост в классе?

Вопрос: в классе в соответствии с некоторыми условиями показывают тост

Проблема: Я не могу назвать Context из класса, getActivity()

Как решить его наилучшим образом? Создать некоторый открытый класс или переменную?

+1

Ваш вопрос очень расплывчатый, я рекомендую посмотреть, как создать [mcve]. – Bryan

+0

Мне нужно вызвать Toast из класса (TextWatcher) - это не расплывчатое qestion – tadvas

+1

Вы прочитали ссылку? Я думаю, вы должны прочитать [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask). Вы не предоставляете никакой информации о том, как вы пытались решить вашу проблему, а также не предоставляли какой-либо код для того, чтобы мы могли воспроизвести проблему. Это * неопределенный вопрос, и предоставление дополнительной информации поможет нам вам помочь. – Bryan

ответ

0

Просто отправьте Context вашему конструктору класса. Как это:

private Context context; 

public MyClass(Context ctx) { 
context = ctx; 
} 

И затем использовать его, чтобы показать тост.

+0

Прохождение «Контекста» вокруг без знания прецедента - хороший способ [вызвать утечку памяти] (http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html) в вашем заявление. – Bryan

+0

@Bryan Тогда можно использовать 'WeakReference'. –

+0

Это один из способов сделать это, но не обязательно для * каждый * кейс. Который я был, я не решался публиковать ответ, основанный на такой небольшой информации. – Bryan

0

Вы можете позвонить Тосту в классе активности следующим образом -

Context context = getApplicationContext(); 
CharSequence text = "Hello toast!"; 
int duration = Toast.LENGTH_SHORT; 

Toast toast = Toast.makeText(context, text, duration); 
toast.show(); 

Чтобы показать в фрагменте или другой класс, вы должны передать ссылку деятельности или контекста в конструкторе фрагмента или конкретном классе. Например,

Fragment fragment = new Fragment(activity); 

В Фрагмент класса -

Class MyFragment extends Fragment{ 
    private Activity mActivity; 

    MyFragment(Activity activity){ 
     mActivity = activity; 
    } 

    void showToast(){ 
     Toast.makeText(mActivity, text, duration); 
    } 

} 
1

Witho ет много контекста, единственным способом, которым я могу рекомендовать запуская Toast сообщение из класса, отличных от Activity является использование Listener интерфейса:

public class Unknown { 

    public interface UnknownListener { 

     void displayMessage(CharSequence message); 

    } 

    private UnknownListener mUnknownListener; 

    private final String mToastMessage = "Unknown message"; 

    public Unknown() {} 

    public void setUnknownListener(UnknownListener listener) { 
     mUnknownListener = listener; 
    } 

    private void doSomething() { 
     if(mUnknownListener != null) { 
      mUnknownListener.displayMessage(mToastMessage); 
     } 
    } 

} 

Затем реализует интерфейс в вашем Activity, убедившись, чтобы удалить ссылку в соответствующий метод жизненного цикла:

public class MainActivity extends AppCompatActivity implements Unknown.UnknownListener { 

    private Unknown mUnknown; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mUnknown = new Unknown(); 
     mUnknown.setUnknownListener(this); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mUnknown.setUnknownListener(null); 
    } 

    @Override 
    public void displayMessage(CharSequence message) { 
     Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 
    } 

} 
+0

Спасибо, что ответили. Возможно, это самое правильное решение, но я предпочитаю простейший путь с вызовом конструктора. Однако, спасибо. – tadvas

 Смежные вопросы

  • Нет связанных вопросов^_^