从主活动中获取上下文变量是否可以?

时间:2017-01-18 01:13:02

标签: android

我必须在Android中大量使用上下文变量,最后我不得不将它传递给很多单调乏味的东西。在我的onCreate方法中分配的主要活动中是否可以使用全局上下文变量,只要在需要上下文时使用该上下文变量和getter方法?例如:

public class MainActivity extends AppCompatActivity {

  private Context context = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // ... code

      Context = this;
  }

  // Context getter method
  public Context getContext(){

    return context;
  }
}

(a)当我需要从另一个需要上下文的活动调用一个方法时,我可以在主活动中使用这个上下文变量吗?

(b)当我从需要上下文的片段调用方法时呢?

2 个答案:

答案 0 :(得分:0)

我建议你在MyApplication中定义上下文变量,它扩展了应用程序: public class MyApplication extends Application { public static Context mContext;//instantiation it in onCreate(); ... } 在AndroidManifest.xml中,<Application android:name=".MyApplication" .... 现在,您可以在任何地方的代码中使用mContext

答案 1 :(得分:0)

根据我的经验和知识,使用application上下文是一种可怕且天真的方法。有关详细信息,请阅读https://stackoverflow.com/a/7298955/3758972

您可以做的是让每个Activity扩展一个共同的BaseActivity类,并在BaseActivity onCreate方法中定义和初始化您的上下文,如下所示:

public class BaseActivity extends AppCompatActivity {

private Context context = null;

@Override
protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  Context = this;
}

// Context getter method
public Context getContext(){
return context;
}
}
  

当我需要从另一个需要上下文的活动中调用方法时,我可以在主活动中使用此上下文变量吗?

是的,现在您可以扩展所有活动并将context转换为特定的Activity来访问方法。

((ActivityA)getContext()).methodOfAActivity();

((ActivityB)getContext()).methodOfBActivity();
  

当我从需要上下文的片段调用方法时怎么样?

与上面类似,您可以使用和转换上下文来访问片段中的活动方法。

我希望它会指导你。