2016-11-10 5 views
0

Я запускаю AsyncTask в основном действии и результате этого является вектором строки. Я хочу использовать этот вектор для изменения вида списка в фрагменте. Я использую интерфейс (Asyncresponce) для получения вектора public void (processFinish), а затем я реализовал Asyncresponce в фрагменте и использовал его для очистки и заполнения адаптера Array, но public void не работает. Я использую оператор регистрации, чтобы понять, но я не вижу его на мониторе устройства.public void реализация не работает во фрагменте

Я не знаю, в чем проблема. Важные части основной деятельности и AsyncTask:

AsyncResponse myasync = new AsyncResponse() { 
    public void processFinish(String output[]) { 

    } 
}; 

MainActivity.FetchWeatherTask weatherTask = new MainActivity.FetchWeatherTask(myasync); 
//MainActivity.FetchWeatherTask weatherTask = new MainActivity.FetchWeatherTask(); 
weatherTask.execute("232931","82da4ddd2e8380be6dea06b177926b2d"); 

на пост выполнить, где я прохожу строку вектора на processFinish:

Log.v(LOG_TAG, "on post execute:+: "+ resultStrs[1]); 
delegate.processFinish(resultStrs); 

и фрагмент:

public class MainActivityFragment extends Fragment 
implements MainActivity.AsyncResponse { 
    public String[] weatherdata = new String[5]; 
    public ArrayAdapter<String> mForecastAdapter; 
    public final String LOG_TAG_fragmet =MainActivityFragment.class.getSimpleName(); 

    @Override 
    public void processFinish(String output[]) { 
    if (output!= null){ 
     Log.v(LOG_TAG_fragmet, "this is from fragment="+ output[1]); 
     mForecastAdapter.clear(); 
    } 
    } 

ответ

0

Вы должны пройти ваш аргумент MainActivityFragment как аргумент для вызова new MainActivity.FetchWeatherTask(myasync);

Экземпляр AsyncResponse вы передаете имеет пустую реализацию для processFinish(Object[]), так что вы на самом деле не перезвонить в MainActivityFragment

Что-то вроде этого, может быть:

public class MainActivityFragment extends Fragment 
implements MainActivity.AsyncResponse { 
public String[] weatherdata = new String[5]; 
public ArrayAdapter<String> mForecastAdapter; 
public final String LOG_TAG_fragmet =MainActivityFragment.class.getSimpleName(); 

@Override 
public void processFinish(String output[]) { 

    if (output!= null){ 
     Log.v(LOG_TAG_fragmet, "this is from fragment="+ output[1]); 
     mForecastAdapter.clear(); 
    } 
} 

public void someMethod() { 
    MainActivity.FetchWeatherTask weatherTask = new MainActivity.FetchWeatherTask(this); 
    weatherTask.execute("232931","82da4ddd2e8380be6dea06b177926b2d"); 
} 
+0

да это работает, однако я поставил это на Oncreateview. большое спасибо – saeed

Смежные вопросы