2013-10-11 4 views
0

У меня есть фрагмент, который имеет кнопку. При создании фрагмента я хочу получить экземпляр UiSettings из фрагмента и изменить, должна ли отображаться кнопка. Вы можете получить идею here. Так что мой код:Реализация View state settings

class MyFragment extends Fragment{ 
    private Button button; 
    private UiSettings settings; 

    public getUiSettings(){ 
     return settings; 
    } 
} 

class UiSettings{ 
    private boolean showButton = true; 
    //setters and getters go here 
} 

Мой вопрос, как я могу вызвать кнопку видимости в зависимости от UISettings, и как подключить кнопку видимость состояния к изменениям в UISettings?

+0

Дайте нам макет предпочтения? –

+0

@Flextra нет предпочтения. Пожалуйста, перейдите по ссылке выше, чтобы получить эту идею. –

+0

это может помочь? http://stackoverflow.com/questions/17549908/android-google-api-failed-to-load-map-fixed –

ответ

1

Я бы переопределить onResume() в вашем Fragment и там возьмите экземпляр UiSettings и применить значение функции с чем-то вроде

button.setVisibility(uiSettings.showButton ? View.VISIBLE : View.GONE); 

Таким образом, в общей сложности, нужно добавить в код

@Override 
public void onResume() { 
    super.onResume(); 
    button.setVisibility(uiSettings.showButton ? View.VISIBLE : View.GONE); 
} 

Также неплохо было бы сделать класс UiSettings вне класса Fragment, а затем применить установщик public к showButton, и в этом сеттере измените видимость кнопки через какой-либо интерфейс, который вы создали (по существу, привязывающий данные два).

интерфейс может выглядеть

public interface Binding { 
    dataChanged(); 
} 

Тогда UiSettings

public class UiSettings { 
    public Binding binder; 
    private boolean showButton; 

    public void setShowButton(boolean showButton) { 
     this.showButton = showButton; 
     if (binder != null) { 
      binder.dataChanged(); 
     } 
    } 

    public boolean getShowButton() { 
     return showButton; 
    } 
} 

И ваш фрагмент затем implementBinding и добавили к нему

@Override 
public void dataChanged() { 
    button.setVisibility(uiSettings.getShowButton() ? View.VISIBLE : View.GONE); 
} 
Смежные вопросы