2014-05-04 59 views
-1

我有一個奇怪的問題,我正在努力。onClick上的Toast消息出來空白

這是很基本的:嘗試點擊imageView時顯示Toast消息, 代碼:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_password); 

    lock = (ImageView) findViewById(R.id.lock); 
    lock.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Toast.makeText(getBaseContext(), "clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

但由於某些原因敬酒消息傳出一片空白,彷彿我發來的「」消息。 如果我移動敬酒行「的onCreate」,它會顯示爲正常, 我不知道似乎是問題

+0

稱它爲你是說,如果你改變了「點擊」字符串參數,以「在OnCreate」,它會正常工作? –

+0

@EvcanMustafa他只是說,如果他把敬酒移動到'onCreate'範圍,它就會起作用。這是因爲'getBaseContext()'不會在偵聽器和'onCreate'中返回相同的上下文。 – GoRoS

回答

0

將行:

Toast.makeText(getBaseContext(), "clicked", Toast.LENGTH_SHORT).show(); 

Toast.makeText(YourActivityClass.this, "clicked", Toast.LENGTH_SHORT).show(); 

正確地獲取上下文。

有關更多說明,請參閱Android: why must use getBaseContext() instead of this的接受答案。

-1

獲取之初的背景下,並用它來顯示吐司:

private static Context mContext; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mContext = getApplicationContext(); 

    setContentView(R.layout.activity_password); 

    lock = (ImageView) findViewById(R.id.lock); 
    lock.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(mContext, "clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+0

爲什麼downvote?看到有些人改正不好,真是太棒了。只要我在這個問題中更正了用戶的答案,他就刪除了他的帖子,可能低估了我的答案,沒有給出任何解釋。這個答案沒有錯,如果是這樣,請爲我們自己的好解釋! – GoRoS

0

使用此靜態方法,所以你可以簡單地調用它,而不是每次都重新創建方法。所以建立這個到您的Class.java(例如)

public static void showToast(Context context, String text) { 
    Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
} 

,然後使用

Class.showToast(getActivity().getApplicationContext(), "text");