2015-02-11 59 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