为什么我无法实例化新变量?

时间:2012-08-13 02:10:25

标签: android android-asynctask instantiation

我正在使用AsyncTask类...我的目标是有一个列表,当点击搜索按钮时,搜索时会在列表中显示“正在搜索...”字符串...为此我试图在内部实现一个适配器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

有什么方法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

参数不正确。看看documentation.

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

答案 1 :(得分:1)

因为SearchActivity.SearchTask不是Activity(或更一般情况下的Context)。您应该使用SearchActivity.this而不是仅仅引用this SearchActivity.SearchTask AsyncTask类的对象的{{1}}。

答案 2 :(得分:1)

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

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

你输入'this'但是'this'不是上下文。

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

所以你使用'getparent()'而不是'this'

答案 3 :(得分:1)

我想这是this的问题。

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