2015-02-23 77 views
0

據我所見,當使用Navigation Drawer (android.support.v4.widget.DrawerLayout)時,你必須使用Fragments。在Android中選擇導航抽屜有什麼含義?

所以所有的活動都必須轉化爲片段。

此外,所有的邏輯將駐留在Navigation Drawer的活動,因此活動文件的大小可能是非常大的,而不是維護友好。

是否還有其他影響,是否有更簡單的方法來解決這些問題?

回答

0

當使用NavigationDrawer you have使用Fragment s。

  • 不正確。只要有Activity即可。儘管如此, Fragments應該表示更多模塊化的& 可重複使用的UI塊。

所有邏輯將駐留在的NavigationDrawerActivity所以Activitiy文件的大小可能是非常大的,而不是 維護友好。

  • 如果你看一看的Google I/O app, 他們所做的就是創建一個類BaseActivity保存所有 通用的功能(包括NavigationDrawer),然後將所有 其他Activity s的從延伸類。這樣,所有的 Activitys都有許多共同的特徵,以及NavigationDrawer, 但沒有複製大量的代碼。

什麼是選擇在Android上NavigationDrawer的含義是什麼?

  • 由於以上兩點說明,可以使用Activity小號 ORFragment秒,它可以將一個可重複使用BaseActivity內封裝代碼,這樣相同的代碼是不是改頭換面 無處不在。所以其含義當然是而不是,即一個 NavigationDrawer增加代碼結構的複雜性。 NavigationDrawer的目的是爲了簡化導航,否則對於用戶 和程序員來說, 本來會是複雜且繁瑣的管理。
+0

想知道如何將它添加到多個活動中。你不需要在所有的活動中添加它嗎? – Psypher 2015-02-23 16:34:55

+0

繼承是避免這種情況的一種方式。 – 2015-02-23 16:46:23

+0

@Ranjith創建一個'BaseActivity'包含導航代碼,然後爲所有活動,而不是繼承/擴展'活動',而不是延長'BaseActivity' – surfer190 2015-02-28 10:02:05

0

我前一陣子做與一個應用程序,我沒有改變所有的活動成了碎片,但只是一種主菜單的,那麼當你從事一些「不同」活動你沒有有抽屜,直到你回來,它甚至可能很煩人。

至於邏輯我把一些片段(相關的每個片段)進行維護。

0

有單一活動的原因很簡單。這是因爲你希望它保持持久。

如果你有多個活動,他們就都需要實現同樣的抽屜佈局,這將導致你和充氣多次填充抽屜。

該活動僅充當碎片和抽屜佈局的容器。它就像是兩者之間的橋樑。

0

我相信你的觀念錯了。讓我解釋一下爲什麼。

至於我使用抽屜式導航 (android.support.v4.widget.DrawerLayout)時所看到的,你必須使用碎片。 所以所有的活動都必須轉化爲片段。

這是不對的。您可以只使用活動或片段,或混合使用您的選擇。

DrawerLayout只是一個ViewGroup。沒有更多,沒有更多。就像FrameLayoutRelativeLayout,LinearLayout等等。正如官方文檔定義:

的ViewGroup是可以包含其他視圖的特殊的視圖(稱爲 孩子。)

這就是今天的DrawerLayout到底是什麼。一個ViewGroup,暴露「抽屜樣」界面,可以用滑動/拖動手勢打開和關閉。

說了這麼多,幾個教程,你會發現在網上使用的片段,只是因爲他們是構建UI組件的模塊化的方式。但您也可以使用普通視圖,例如官方指南中的示例:

在這裏您會看到一個ListView作爲導航的選項,以及將放置當前「主要內容」的FrameLayout內。

https://developer.android.com/training/implementing-navigation/nav-drawer.html

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

編輯:建議抽象的活動:

(全部由心臟,可能的錯誤,只是一般的方法輸入)

public abstract BaseActivity extends Activity implements AdapterView.OnItemClickListener { 
    public void onCreate(Bundle savedInstances){ 
     super.onCreate(savedInstances); 
     super.setContentView(R.layout.base_activity); // that's the layout above 

     // do here the logic to setup the `ListView` and listen to OnItemClick for the list items 

     listView.setOnItemClickListener(this); 
    } 

    @Override 
    public void setContentView (int layoutResID){ 
     // here we override setContentView force content inside the FrameLayout 
     LayoutInflater.from(this) 
     .inflate(layoutResID, 
        findViewById(R.id.content_frame, true); 
    } 

    @Override 
    public void onItemClick (AdapterView<?> parent, View view, int position, long id){ 
     // here you navigate to a different activity 
    } 
} 
+0

100%正確。但是通過DrawerLayout使用活動意味着您必須在您使用的每個活動上覆制佈局和抽屜導航代碼。這不是乾的。 – surfer190 2015-02-24 09:40:18

+0

這是一個不同的話題。這是關於軟件架構以及作爲開發人員如何使其變得更好。兩個選項(當然還有其他選項):1)您可以使用抽屜和抽屜「內容」進行1項活動。每個'mainContent'都有一個片段。活動代碼就是片段切換,每個片段都有自己的與自己內容相關的代碼。 2)您可以使用抽屜進行「抽象」活動,每個具體活動只是「實現」內容。重要的是,沒有什麼是強迫你採取某種方法。 – Budius 2015-02-24 09:46:01

+0

然而,沒有建議或最佳實踐方法。我喜歡抽象活動的方法,但我需要研究如何實現這一點。所以現在我正在實現實現'onClickListeners'的可互換片段,以便他們可以執行邏輯。 – surfer190 2015-02-24 09:59:02