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

时间:2016-02-21 03:05:43

标签: android

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

private void displayMovies(List<Movie> movies) {
     ArrayAdapter adapter = new
     ArrayAdapter(DisplayMoviesActivity.getContext(),
         android.R.layout.simple_list_item_1, movies);
     ListView listView = DisplayMoviesActivity.getListView();
}

这是一个不同的类。

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;
}
}

每当我尝试启动活动时,应用都会崩溃。 这是我用来启动活动的类。

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();
    }
}

我认为这是相关的logcat。

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

2 个答案:

答案 0 :(得分:0)

使用Context参数删除构造函数。

public DisplayMoviesActivity(Context context) {
    this.context = context;
}

而是将Context传递给displayMovies方法的对象。 请提供您班级的代码。

注意

你的代码清楚地表明编写它的人缺乏常见的android开发知识。

结束注释

示例:

Helper helper = new Helper(this);
helper.displayMovies(//);

答案 1 :(得分:0)

仔细查看the docs for Activity会显示以下继承层次结构:

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity

请注意,ContextActivity的祖先。这意味着Activity ContextActivity sublcass中不需要接受Context的构造函数。 (此外,永远不会调用此构造函数。)

如果需要Context的代码出现在Activity子类中的方法中,则可以使用this来引用当前的Activity对象(即也是Context):

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, movies);