首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将上下文从一个活动传递到另一个不是活动的类中的ArrayAdapter?

如何将上下文从一个活动传递到另一个不是活动的类中的ArrayAdapter?
EN

Stack Overflow用户
提问于 2016-02-21 03:05:42
回答 2查看 1.3K关注 0票数 2

我正在尝试使用一系列的电影,并将它们放在一个列表视图中。调试之后,导致活动崩溃的唯一原因是使用getContext()。我尝试了getApplicationContext(),这也使应用程序崩溃了。我不知道该怎么办。下面是一个类中的一个方法。

代码语言:javascript
运行
复制
private void displayMovies(List<Movie> movies) {
     ArrayAdapter adapter = new
     ArrayAdapter(DisplayMoviesActivity.getContext(),
         android.R.layout.simple_list_item_1, movies);
     ListView listView = DisplayMoviesActivity.getListView();
}

这是另一门课。

代码语言:javascript
运行
复制
public class DisplayMoviesActivity extends AppCompatActivity {

static ListView displayMoviesView;
static Context context;

public DisplayMoviesActivity(Context context) {
    this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_movies);
    displayMoviesView = (ListView) findViewById(R.id.displayMoviesView);
    String searchText = (getIntent().getStringExtra("text"));
    RottenTomatoesJSON RTJSON = new RottenTomatoesJSON(this);
    RTJSON.searchMovieByName(searchText, 12);

}

public static Context getContext() {
    return context;
}

public static ListView getListView() {
    return displayMoviesView;
}
}

每当我尝试启动该活动时,应用程序就会崩溃。这是我用来开始活动的课程。

代码语言:javascript
运行
复制
public void searchMovies(View v){
    SearchView searchBar = (SearchView) findViewById(R.id.searchView);
    if (searchBar.isIconified() || searchBar.getQuery() == null || searchBar.getQuery() == "") {
        Context context = getApplicationContext();
        CharSequence text = "Please enter movie to search!";
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    } else {
        String searchText = searchBar.getQuery().toString();
        Intent intent = new Intent(this, DisplayMoviesActivity.class);
        intent.putExtra("text",searchText);
        startActivity(intent);
        finish();
    }
}

我想这就是相关的逻辑。

代码语言:javascript
运行
复制
I/art: Background sticky concurrent mark sweep GC freed 2773(224KB)
  AllocSpace objects, 0(0B) LOS objects, 17% free, 931KB/1135KB, paused
 5.134ms total 40.550ms
 W/art: Suspending all threads took: 5.956ms
 D/OpenGLRenderer: Render dirty regions requested: true
 D/Atlas: Validating map...
 I/OpenGLRenderer: Initialized EGL, version 1.4
 D/OpenGLRenderer: Enabling debug mode 0
 W/EGL_emulation: eglSurfaceAttrib not implemented
 W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface   0xa638a320, error=EGL_SUCCESS
EN

Stack Overflow用户

发布于 2016-02-21 03:30:10

仔细查看Activity显示了以下继承层次结构:

代码语言:javascript
运行
复制
java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity

请注意,ContextActivity的祖先。这意味着Activity 就是 Context。在接受ActivityContext子目录中不需要构造函数。(此外,这个构造函数将永远不会被调用。)

如果需要Context的代码发生在Activity子类中的方法中,则只需使用this引用当前的Activity对象(也是Context):

代码语言:javascript
运行
复制
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, movies);
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35531804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档