2014-11-20 77 views
0

我開始使用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

回答

2

你有幾個選項。

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

    public void call_toast(Context context){} 
    

和從活動中調用:

call_toast(SomeActivity.this); 
  • 呼叫getApplicationContext()你需要一個活動。
  • 希望這有助於你開始。

    +0

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

    +0

    對不起,但我怎麼能發送從異步任務吐司!? :O – 2014-11-20 18:13:21

    +0

    請參閱下面關於在主線程**外使用Toast **的答案。 – GNewc 2014-11-20 19:34:35

    1

    嘗試

    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

    2

    顯示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