2012-02-01 17 views
7

Stack Overflow的第一個問題,如果格式不正確,請致歉。Android - 如何製作帶有視圖的複雜選項卡式應用

我正在開發一個相對複雜的選項卡式應用程序,並且在接觸到ActivityGroup和TabActivity不推薦使用的信息之前已經設置了基本知識,並且首選模型是使用視圖。

我沒有使用視圖的麻煩,這是一個關於架構而不是語法的問題(這就是爲什麼我沒有發佈任何代碼)。具體來說,我應該如何去重組應用程序來使用視圖而不是Intent推出的活動

該應用程序有五個選項卡;兩個擁有一個佈局,沒有問題。其他三個選項卡正在運行一個具有2-5個不同活動的ActivityGroup(即一個運行設置活動的選項卡,其中單擊每個視圖會啓動一個處理該特定設置的新Activity,按下後退按鈕可返回到更廣泛的設置活動/視圖)。如果我將每個Tab都保留爲TabActivity,那麼將這些內部轉換更改爲視圖仍然相當容易,而不是單獨的活動。

主要問題是僅使用視圖,根本沒有TabActivity/Activity組。我所做的絕大多數研究一直在討論是否使用活動或視圖,或關於特定語法。我一直無法清楚地知道如何在整個應用程序中實現向視圖的轉換。

  1. 如果我這樣做,是不是現在整個應用程序都在單個活動中運行 - 託管標籤式佈局的活動? (1)如果是真的,如何管理這個?儘管ActivityGroup被棄用,但所有的Android文檔似乎仍然聲稱,對於功能的不同方面,最好使用單獨的活動 - 這是有道理的。 Android開發團隊是否簡單地決定堆棧和設備的成本使TabActivity實現無效?

  2. 如果應用程序在單個Activity中運行,爲每個選項卡管理不同視圖(然後在必要時管理不同視圖內),我應該使用一個巨大的onClick方法處理來自任何可點擊視圖的所有點擊,根據哪個視圖處於活動狀態來處理輸入?還是應該以編程方式註冊並取消所有聽衆的註冊?

  3. 使用單個活動,所有時間都不會運行任何點擊偵聽器或任何廣播接收器,即使在不必要時也會消耗資源?

  4. 使用單個活動,後退按鈕將從其功能的任何位置退出整個應用程序。如果我使用視圖,是否必須一致地重寫onBackPressed()並仔細管理應用行爲以強制它像「Android應用」一樣行爲?

  5. AM我在想這個完全錯誤嗎?我可能無意中嘗試用視圖重新創建ActivityGroup和TabActivity功能,而當我採用完全不同的設計方法來使用製表符和視圖時。

當人們在谷歌說,我們不應該用活動標籤了,和馬克·墨菲先生這樣強調同意,我傾向於相信。我根本無法研究切換方式,而無需手動重新創建大量的活動功能(可能包括各種骯髒的黑客攻擊)。

預先爲任何願意處理這種模糊和被覆蓋的話題的人提升情緒。

+1

真優秀的問題...歡迎來到Stack。 – 2012-02-01 21:23:49

回答

2

使用Fragments是執行標籤式ui組件的新標準,我認爲您必須忽略它們,因爲它們是上述所有問題的缺失部分。祝你好運。

不要忘記,使用兼容性庫將Fragment支持一路帶回1.6。

here是一個簡單的Google推薦教程,用於在TabHost中使用Fragments。

+0

你說得對,我完全忽略了片段。非常有幫助,謝謝。 – HeMightBeTodd 2012-02-01 21:44:15

+0

@HendlerExploit,如果我正確理解片段文檔,我們不希望爲每個選項卡使用單獨的活動,但是* IS *被認爲是對每個單獨的功能組件使用單獨片段的好設計? – HeMightBeTodd 2012-02-01 22:16:49

+0

正確,碎片可以被視爲一組核心邏輯。與活動不同,但使用片段,您可以通過在不同位置重複使用相同片段來限制代碼重複。 – HandlerExploit 2012-02-01 22:18:36

1

關於3)將您的應用程序分成儘可能多的活動,因爲您有不同的應用程序部分。今天,我甚至會選擇Fragements,這些Fragements可以讓你更輕鬆地在不同的佈局中組合。爲手機和平板電腦製作應用程序。 大多數時候,你可以設置在相應的XML佈局定義文件onClick聽衆這樣的:

<ImageButton 
    android:id="@+id/new_tweet_back_button" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="left" 
    android:onClick="done" 
    android:src="@drawable/back_button" 
    android:layout_below="@id/CharCount" 
     /> 

這裏屬性指向實現處理程序的方法。 你不需要註銷任何東西。

,而不是標籤我會去的ViewPager這使得IMO只通過左右滑動交換看法更自然的體驗(例如參見G +應用程序或市場應用)

+0

我想我把這個問題留給了最初的問題 - 絕大多數的點擊處理都是通過在layout xml中通過android:onClick聲明的方法完成的。在這種情況下,只有在使用setContent()或setContentView()調用相關文件時,偵聽器纔會激活,這樣我就不必擔心了嗎? – HeMightBeTodd 2012-02-01 21:36:37

+0

是的 - 也可以使用多個用戶界面元素的方法 - 將「調用視圖」作爲參數傳入。 – 2012-02-01 21:41:40

+0

那麼,如果我在多個視圖上聲明android:onClick =「myClickHandler」,那麼所有人都會調用相同的myClickHandler(View v),並傳遞相應的視圖? – HeMightBeTodd 2012-02-01 21:43:24

0

作爲最後的答案,且我自己的問題:

在選項卡DID中使用片段解決了所有上述問題。

因此,我沒有一個活動定義包含其他活動的選項卡,我有一個大的FragmentActivity設置和切換各種片段的視圖。每個選項卡視圖在XML中定義的點擊方法屬於FragmentActivity,我選擇讓每個onClick在適當的片段中調用相應的方法(如果需要,傳遞上下文),以便以編程方式操作每個視圖的代碼可以保留在適當的班級。

這是一款使用兼容性套件的手機,不是平板電腦或Honeycomb,所以我不能爲那些不幸的人說話。

這個解決方案似乎對我來說效果不錯。我建議任何人看同樣的問題,檢查出來:

thepsuedocoder博客文章: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

Android文檔的片段: http://developer.android.com/guide/topics/fundamentals/fragments.html

的API演示 「片段標籤」 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment

相關問題