5

Mam ustawienie Aktywność tej nazwy sklepu, zmieniając nazwę, którą musi najpierw wysłać do mojego serwera, a jeśli jego sklep na serwerze z powodzeniem to powinien ustawić w podsumowaniu mojego EditTextPreference.Jak dotknąć EditTextPrefences z innego działania lub innego wątku

wszystko działa dobrze, ale na koniec nie mogę dotknąć EditTextPreference, aby ustawić na nim nazwę.

metoda ta aktywność wiązania, ale wywoływana z onPostExecute z AsyncTask

public void setNewSetting(Activity activity) { 
    EditTextPreference editTextPreference = (EditTextPreference) UserSettingActivity.this.findPreference(activity.getString(R.string.pref_name_key)); 
    name = sharedPreferences.getString(activity.getString(R.string.pref_name_key), ""); 
    editTextPreference.setSummary(name); 
} 

aktywność jest aktywność ustawienie że przekazywane do AsyncTask, a następnie przekazywane do metody.

mój problem jest tutaj i dać mi nullPoiterException dla EditTextPreferences

przepraszam za mój zły język angielski. i dzięki z góry.

Odpowiedz

2

Metoda 1:

Jeśli działalność jest nadal w tle, zdać context do AsyncTask i utworzyć instancję ustawieniach działania.

SettingsActivity settingsActivity = (SettingsActivity) context; 

następnie wywołać metodę w onPostExecute()

settingsActivity.setNewSetting(); 

I mieć metodę setNewSetting() w SettingsActivity. Powinien być jawny i wprowadzić pewne wartości zerowe.

Metoda 2:

Użyć delegat interfejs. Utwórz interfejs:

public interface TaskListener { 
     void onComplete(); 
    } 

przekazać go do AsyncTask Po uruchomieniu go, coś jak:

new MyAsyncTask(params, params, new TaskListener() { 

    @Override 
    public void onComplete() { 

     // call setNewSetting from within SettingsActivity 
    } 

}).execute(); 

dostać to w AsyncTask constructer:

public MyAsyncTask (String params, String param2, TaskListener taskListenerDelegate) { 

    this.taskListenerDelegate = taskListenerDelegate; 
} 

wywołać jej onComplete() w onPostExecute() :

taskListenerDelegate.onComplete(); 

Metoda 3

Nie zalecany, ale można spróbować z startActivityForResult() też. I posłuchaj w onActivityResult(), aby zastosować zmiany.

+1

dziękuję bardzo. Próbowałem pierwszej metody i działa dobrze. Spróbuję też innych metod. zaoszczędziłeś mój czas. dziękuje dużo –

+0

co z trzecią metodą? z asynTask nie mamy zamiaru używać startAcrivityForResult, więc w jaki sposób możemy użyć? @rupinderjeet –

+1

, który byłby dostępny, gdybyś użył działania zamiast AsyncTask. Będziesz używał Aktywności z procedurami obsługi w tle. Ale, poważnie, nie rób tego, jego brudny i większy ból. – rupinderjeet