吐司在外部类 - Android电子

问题描述:

我开始使用AndroidStudio,我想在我的外部类的主要活动中使用吐司:吐司在外部类 - Android电子

在外部类我有这个方法:

private void call_toast(){ 
    Toast.makeText(MainActivity, "Task Finalize!", Toast.LENGTH_SHORT).show(); 
} 

这是我的的想法,但给我错误的“MainActivity”。我如何在外部课堂上展示我的实际活动?提前致谢,并对我的英语感到抱歉!

PD1:如果您需要更多信息或代码建议我!

+0

外部类?你的意思是内部课堂吗? – Simas 2014-11-20 17:18:04

+0

如果您需要从AsyncTask中更新UI(例如使用'Toast'),如注释中所示,您可以在'onPostExecute()'或除'doInBackground()'之外的任何方法中做到这一点,如果它是活动的内部类。如果你的'AsyncTask'是一个单独的文件,[看到这个关于使用接口的答案](http://stackoverflow.com/questions/18517400/inner-class-can-access-but-not-update-values-asynctask/ 18517648#18517648) – codeMagic 2014-11-20 19:45:27

你有几个选项。

  1. 通行证在上下文到call_toast即:

    public void call_toast(Context context){} 
    

和从活动中调用:

call_toast(SomeActivity.this); 
  1. 呼叫getApplicationContext()你需要一个活动。
  2. 希望这有助于你开始。

开始=>
+0

非常感谢! – 2014-11-20 17:33:20

+0

对不起,但我怎么能发送从异步任务吐司!? :O – 2014-11-20 18:13:21

+0

请参阅下面关于在主线程**外使用Toast **的答案。 – GNewc 2014-11-20 19:34:35

尝试

Toast.makeText(getApplicationContext(), "Task Finalize!", Toast.LENGTH_SHORT).show(); 
+0

对不起,但我怎样才能从异步任务发送吐司!? :O – 2014-11-20 18:13:43

+1

嗨Merli,你可以使用这种方法:http://stackoverflow.com/questions/16830255/how-to-display-toast-in-asynctask-in-android – Machado 2014-11-21 11:02:30

显示Toast需要在主UI线程中完成。以下代码是可以从任何线程(包括后台服务,当您的应用程序甚至不在前台时)执行的静态方法的示例。

public class ServiceUtils { 
    //------------------------------------------------------------------------- 
    // Constructor 

    // All methods in this class are static, no need for a public constructor 
    private ServiceUtils() {} 

    private static final Handler s_toastHandler = new Handler(Looper.getMainLooper()); 


    public static void notifyUI(final Context context, final String toastMsg) { 
     s_toastHandler.post(new Runnable() { 
      public void run() { 
       try { 
        Toast.makeText(context, 
           toastMsg, 
           Toast.LENGTH_SHORT).show(); 
       } 
       catch(Exception ex) { 
       Log.e(ServiceUtils.class.getSimpleName(), ex.getMessage()); 
       } 
      } 
     }); 
    } 
} 

现在你可以从任何地方拨打:

ServiceUtils.notifyUI(getApplicationContext(), "some toast message") 
+1

Yikes ...代码块!介意解释你的代码为人们做了什么? – codeMagic 2014-11-20 17:25:38

+1

当然。如果要显示Toast,则需要确保它在主UI线程中完成。上面的代码显式地执行主循环(即主UI线程)中的Toast.makeText(...)方法。因此,此静态方法允许用户显示来自_anywhere_的Toast,只要他们可以访问Context。 – GNewc 2014-11-20 19:29:01

+0

我简化了上面的解决方案,以方便消费。 – GNewc 2014-11-20 19:42:28