2015-02-11 81 views
0

我還沒有很好的理解上下文。在大多數情況下,我看到人們在構造函數中使用'this'關鍵字作爲上下文。我正在編寫一個具有兩項活動的應用程序 - MainActivity和DisplayMessageActivity。這兩個活動都包含菜單項 - 搜索和設置。如果我點擊「搜索」,應該出現一個敬酒 - 「搜索已點擊」並且相同的設置。由於這些操作對於這兩種活動的觸摸都是相同的,因此我創建了一個獨立的MenuMethods類來處理吐司顯示。 MenuMethods將包含2個公共靜態void方法來顯示Toast。下面是相關代碼:Android中的上下文相關問題

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 

     MenuMethods.openSearch(); 
    } 
    if (id==R.id.action_search){ 

     MenuMethods.openSettings(); 
    } 

和MenuMethods類中的方法是這樣的:

public class MenuMethods { 
public static void openSearch(){ 

    Toast.makeText(this, "Search was Clicked!", Toast.LENGTH_SHORT).show(); 
} 

public static void openSettings(){ 
    Toast.makeText(this, "Settings was Clicked!",Toast.LENGTH_SHORT).show(); 
} 
} 

可能的錯誤:(應用程序).​​MenuMethods.this不能從靜態上下文引用。 我該如何糾正?

回答

0
MenuMethods.openSearch(MyActivity.this); 

public static void openSearch(Context ctx){ 

    Toast.makeText(ctx, "Search was Clicked!", Toast.LENGTH_SHORT).show(); 
} 

有什麼理由雖然有一個單獨的類MenuMethods你的情況

+0

非常感謝亞歷克斯。我只是一個初學者。我仍在學習。我正在編寫這個代碼來理解上下文。在這種情況下,我認爲MenuMethods.this不是有效的上下文,因爲它不擴展任何活動。我對嗎? – Whiskeyjack 2015-02-11 20:49:46

+0

是的,MenuMethods只是你寫的一個類,它不知道Context的任何內容。相反,Activity擴展了Context,因此Activity是一個Context。上下文是一個類,沒有別的 – 2015-02-11 21:18:03