2016-10-12 23 views
-1

我的項目的情況如下:類如何在課堂中稱呼吐司?根據在課堂上一定條件下表現出吐司</p> <p>的問題:我不能調用從類上下文

問題 - 活動 - 片段getActivity()

如何以最佳方式解決它?創建一些公共類或變量?

+1

您的問題非常模糊,我建議您研究如何創建[mcve]。 – Bryan

+0

我需要從類(TextWatcher)調用Toast - 這不是一個模糊的問題 – tadvas

+1

您是否閱讀過鏈接?我認爲你應該閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)。您沒有提供任何有關如何解決您的問題的信息,您也沒有提供任何代碼來幫助我們重現問題。它*是一個模糊的問題,提供更多信息將幫助我們爲您提供幫助。 – Bryan

回答

0

只需將Context發送給您的類構造函數。 像這樣:

private Context context; 

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

,然後用它來顯示敬酒。

+0

在不知道用例的情況下傳遞一個'Context'是一個很好的方法來引起內存泄漏(http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html)應用。 – Bryan

+0

@Bryan One可以使用'WeakReference'。 –

+0

這是做到這一點的一種方式,但對於*每個*用例都不是必需的。基於這樣的小信息,我當時就猶豫了。 – Bryan

0

你可以叫土司Activity類如下 -

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

無覆蓋UT很多情況下,我可以推薦從不是Activity其他類觸發Toast消息的唯一方法是使用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