2012-08-13 77 views
1

我正在使用AsyncTask类...我的目标是有一个列表,当搜索按钮被点击时,使搜索...列表中出现“搜索...”字符串为此,我试图instaniate一个适配器内onPreExecute ()为什么我无法实例化新变量?

private class SearchTask extends AsyncTask<Void, Void, Void>{ 

     protected void onPreExecute() { 
      String[] strings = new String[] { "Searching" }; 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strings); 


      mSearchButton.setEnabled(false); 
     } 
       //rest of methods 
} 

编译器给了我在new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strings);

一个错误,它说:The constructor ArrayAdapter<String>(SearchActivity.SearchTask, int, ArrayList<String>) is undefined

什么办法解决呢?

回答

1

不正确的参数。看看documentation.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(YourActivity.this,  
        android.R.layout.simple_list_item_1, strings); 
1

因为SearchActivity.SearchTask不是Activity(或更一般的场景中Context)。您应该使用SearchActivity.this而不是简单的this,它指的是AsyncTask类型的SearchActivity.SearchTask子类型的对象。

1

因为你的参数是错的 ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,strings);

(上下文,整型,对象[])

你输入 '这个',而是 '这' 不是上下文。

如果在SearchTask中使用'this',则表示不是上下文。

让你用,而不是“本”

1

我猜它是this问题“的getParent()”。

SearchActivity中添加成员变量:

private Context mContext = this; 

,然后改变:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strings); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1, strings); 
相关问题