2012-08-13 4 views
1

Я использовал класс 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

Любой способ решить эту проблему?

ответ

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, что относится к объекту типа SearchActivity.SearchTask подкласс AsyncTask.

1

Поскольку ваш параметр неверен ArrayAdapter adapter = новый ArrayAdapter (это android.R.layout.simple_list_item_1, строки);

(контекст, INT, объект [])

вы вводите 'это', но 'это' не контекст.

Если вы используете «this» в SearchTask, это означает не контекст.

так что вы используете «GetParent()» вместо «этого»

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); 
Смежные вопросы