2016-01-28 4 views
0

У меня есть ящик навигации в основной деятельности A и активность входа B. В действии B есть OnLogin callback, в котором я обновляю глобальную userinfo из одного элемента, к которому может обратиться основной вид активности. Обратите внимание, что этот OnLogin callback вызывается в потоке.обновление Основное действие ui от обратного вызова в активности входа

Теперь я хочу обновить основной заголовок ящика навигации активности (например, имя пользователя и значок пользователя). Я использую startActivityForResult в основной деятельности A, чтобы получить флаг от активности входа B, чтобы указать, что что-то изменилось, а затем обновить интерфейс в OnActivityResult.

Проблема я столкнулся в том, что, когда активность B заканчивается (спровоцированные OnBackPressed активности B), то OnLogin обратного вызова не нужно дозвонились. В результате onActivityResult не потребуется забрать изменение, сделанное в UserInfo. Мой вопрос в том, что это правильный способ обновления пользовательского интерфейса в этом случае?

+0

Я думаю использовать observble мая, что вы ищут .http: // devel oper.android.com/reference/java/util/Observable.html – App07

ответ

0

Что я в конечном итоге делает

UserInfo.java

class UserInfo extends Observable { 
    private String value_; 
    public void setValue(String value) 
    { 
    value_ = value; 
    setChanged(); 
    } 
} 

MainActivity.java

MainActivity extends AppCompatActivity implements Observer { 
    public void onCreate(Bundle savedInstanceState) 
    { 
     // other onCreate stuff 
     Singleton.getInstance().getUserInfo().addObserver(this); 
     // UserInfo initialization 
     ... 
     // UI initialization 
     Singleton.getInstance().getUserInfo().notifyObservers(); 
    } 

    public void update(Observable observable, Object data) 
    { 
     if (observable instanceof UserInfo) 
     { 
      //update ui 
     } 
    } 
} 

LoginActivity.java

 OnLogin(String value) 
    { 
     UserInfo userInfo = Singleton.getInstance().getUserInfo(); 
     userInfo.setValue(value); 
     userInfo.notifyObserver(); 
    } 
Смежные вопросы