2013-01-18 109 views
0

我有一個測驗應用程序和兩個片段,我有ViewPager中的兩個測驗模式。對於每個片段,除了其他內容之外,我還會通過在遍歷所有類別的while循環中從XML擴展linearlayouts來動態創建列表。包含這個列表的這個佈局在兩種模式下是相同的,它是不同的片段的其餘部分,因此需要兩個單獨的頁面。在兩個片段中使用相同的視圖兩次

因此,問題是我做了兩次膨脹佈局的昂貴過程,一次在每個片段內膨脹一次。我只想這樣做一次並使用它兩次。

兩個解決方案,我認爲:

  • 父活動使用的適配器,通過 碎片進入本,並隨後用ExpandableListView。

問題:

  1. 我使用複選框選擇類別。這兩個片段處理點擊的方式不同。憑藉我有限的知識,我不知道如何實現這一目標。我知道我可以誇大自定義佈局,但是我該如何在片段中設置偵聽器?
  2. 我的一些類別是分組的,其他類別是獨立的。我如何去除這些物品中的箭頭?

  • 在父活動中使用arraylist。在每個片段中訪問它並通過這種方式將佈局添加到父級。

問題:

  1. 不能做到這一點,因爲我加入了同樣的觀點兩次,所以我得到一個錯誤的指定子已經有母。 (IllegalStateException異常)

但是這並不意味着我可以輕鬆地訪問複選框,並通過重複設置oncheckedchangedlisteners

非常感謝你提前:)如果您需要了解更多信息或其他任何東西只問!

+0

這兩個片段在'ViewPager'中? – Luksprog

+0

是的,我給ViewPager提供了一個FragmentStatePageAdapter – AndroidPenguin

+0

你是否從另一方面考慮過它,比如有一個開關在兩種模式之間切換(在你的情況下它是'ViewPager'),然後改變'ListView'的單個實例以適應所請求的模式(通過添加或刪除元素)。 – Audrius

回答

1

我動態地創建一個列表,通過遍歷遍歷所有類別的while循環中的XML 的linearlayouts。

這表明一個ListView

在父活動中使用arraylist。在每個 片段中訪問此代碼並以此方式將佈局添加到父代。

此解決方案從一開始就不會工作,因爲您有一個ViewPager中的兩個片段,它們施加了不同的行爲。如果片段不在ViewPager中,您可以構建一個機制將這些視圖存儲在列表中,然後動態分離//將它們從片段視圖中附加。但是將視圖存儲在一個列表中(並且將它們一直存儲在內存中)以及管理其狀態的頭痛並不值得。

使用在父活動的適配器,通過 片段訪問該並且隨後使用ExpandableListView。

爲什麼只使用一個適配器而不是兩個,每個片段一個(因此它們是獨立的)?我也會在片段本身中實現適配器。

我使用複選框來選擇類別。這兩個片段處理 點擊的方式不同。憑藉我有限的知識,我不知道 如何實現這一目標。我知道我可以膨脹自定義佈局,但是然後 如何在片段中設置偵聽器?

不太清楚,但如果你在談論從「行」佈局訪問CheckBoxe,並具有基於兩個片段用戶操作不同的行爲,你可以很容易的實現基本適配器類。該基礎適配器類將處理通用邏輯,但您也將在CheckBox操作(在OnCheckedChangeListener中)上調用抽象方法。這個基本適配器的兩個子語句(對於這兩個片段)將分別使用彼此獨立的邏輯來實現該抽象方法。

我的一些類別是分組的,其他類別是獨立的項目。 我如何刪除這些項目中的箭頭?

像上面這樣,可以通過實現智能適配器來完成。

+0

謝謝你的驚人回覆!從字面上理解了一切。你能解釋智能適配器還是指向正確的方向? – AndroidPenguin

+0

@AndroidPenguin該適配器的實現取決於當前數據的外觀。下面是一個真正的基本適配器,用於查看如何處理同一操作中的不同行爲https://gist.github.com/4572102 – Luksprog