2014-10-27 51 views
0

現狀:創建的應用程序用戶界面一家專業的Android

我們有不同的userinterfaces,這是建設成爲碎片,例如MenuFragment:

public class MenuFragment extends Fragment implements Hideable, View.OnClickListener { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     this.view = inflater.inflate(R.layout.menu, container, false); 
    } 

    @Override 
    public void hide() { 
     view.setVisibility(View.GONE); 
    } 

    @Override 
    public void show() { 
     view.setVisibility(View.VISIBLE); 
    } 
} 

可隱藏的:

public static interface Hideable { 

    void hide(); 

    void show(); 
} 

國家是枚舉:

public enum InterfaceState { 
    STANDARD, TWO, THREE ; 

    private List<Hideable> visibleElements; 

    private void setVisibleElements(Hideable[] visibleElements) { 
     this.visibleElements = Arrays.asList(visibleElements); 
    } 
} 

使用它們設置:

InterfaceState.STANDARD.setVisibleElements(new Hideable[] { menuFragment }); 

其中menuFragment是

menuFragment = (MenuFragment) activity.getFragmentManager().findFragmentById(R.id.menu_fragment); 

現在我改變狀態調用changeToState:

public void changeToState(InterfaceState state) { 

    List<Hideable> hideList = new LinkedList<>(); 
    for (Hideable e : this.currentState.visibleElements) { 
     if (!state.visibleElements.contains(e)) 
      hideList.add(e); 
      e.hide(); 

    } 

    List<Hideable> showList = new LinkedList<>(); 
    for (Hideable e : state.visibleElements) { 
     if (!this.currentState.visibleElements.contains(e)) 
      showList.add(e); 
      e.show(); 
    } 

系統似乎是馬車。有時UI元素不會出現。

問題:

  1. 這是實現一個UI的好方法?如果不是,那麼更好的方法是什麼?
  2. Android是否爲可視性=「GONE」的視圖分配空間?要使用上層機制,我需要直接在應用程序啓動時定義所有UI元素(如MenuFragment menuFragment)。
  3. 任何建議/改進?

感謝所有讀者。

回答

0
  1. 我一直主張約定優於配置規則。 Android在如何設計用戶界面方面有一些很好的約定,只要有可能就應該打勾。

  2. 不,它不。也就是說,View.GONE使視圖表現得好像不存在(從佈局角度來看),其中View.INVISIBLE分配視圖所需的佈局空間,但僅使視圖不可見。但是,即使使用View.GONE,您仍然可以通過findViewById()獲得您的觀點。

  3. 我認爲存儲信息像這樣的枚舉是不好的主意。你應該找到適合你的不同的方法(把你的列表中的活動,在Application類或類似的東西。)

編輯:你可以找到Wikipedia關於模式的一些有用的信息,你可以閱讀更多關於Android設計指南here。還有一個關於here模式的很好的文檔。你也可以看看AOSP的code style guidelines(或者,呃,規則),因爲它們提供了一些關於如何編寫代碼的很好的約定。

+0

你能給我更多關於你的第一點的信息嗎?我在哪裏可以找到文學? – kaynow 2014-10-29 10:34:56

+0

@kaynow看到我更新的答案 – Squeazer 2014-10-29 11:37:50

相關問題