2012-10-16 45 views
3

我想不出一個更好的問題標題:(的Android:使用片段

在我的應用程序需要有這樣的事情一個提問10+有問題,每次1個問題的更好的辦法

我所做的是:

  1. 有1個活動說MainActivity,在其的onCreate()編程添加一個片段說Frag_1

  2. 在Frag_1我有一個Interfa CE onButtonClickedListener與方法onClicked得到一個回調到活動才知道是點擊哪個選項等,

  3. 實現我的MainActivity並在該方法中onClicked此接口的方法,我改變了片段Frag_2(第二個問題)等等。

的問題是:

我結束了有10個片段,我的MainActivity實現10個接口,1這些片段。將來我可能會有30-40個問題。

編輯:

每一個問題就不會是類似的。問題的答案選項是EditText/Spinner/RadioButtons等,所以我不能使用相同的片段,只需更改問題和答案選項文本。

有沒有更好的,更有效的方式來處理這個

謝謝

+0

所有的問題都有類似的結構嗎?如果他們這樣做,你可以逃脫使用viewpager和fragmentPagerAdapter –

+0

號一些將有選項作爲單選按鈕/微調/ editText –

+0

不得不說,你問這個問題出色。但更好地添加您的回覆馬可在問題本身。 – Krishnabhadra

回答

1

你幾乎沒有。 爲MainActivity創建一個更廣泛/通用的接口來實現。 也許類似的東西public void fragClickCallback(int fragId, Bundle data);

你實現這樣你可以做一個switch() case知道哪些問題是,你的包可以裝於不同類型的答案(int作爲radion按鈕/紡紗,字符串開放答案不同的密鑰等)。

並確保您在每個碎片事務中使用.replace(...)刪除之前的碎片。

編輯

此外,還有一些你可以建立你的碎片沒有創造幾十億人的一些巧妙的方法。可能有多少種不同類型的問題?讓我們來算:

  • 選擇題(單一的答案) - >整數(指數)
  • 選擇題(可多選) - >整數(標誌)
  • 數字輸入 - >浮點/雙精度
  • 編輯文本 - >字符串
  • 日期選擇器 - >長(紀元)
  • 時間選擇器 - > 3個整數(?)

所以我們有6個片段和處理switch statement 6點的方式,現在它只是傳遞正確的參數的片段

編輯:

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("curChoice", mCurCheckPosition); 
    } 

,然後在你的片段ActivityCreated()

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) { 
     // Restore last state for checked position. 
     mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
    } 
} 

這些代碼是從http://developer.android.com/reference/android/app/Fragment.html我建議你進一步閱讀該頁面。 該示例正在恢復光標位置,但您可以使用它恢復以前的用戶答案(文本,整數,浮點數等等)。

+0

因此,可能有多少個問題,我將最多有6個片段,只需更改他們的文本/選項? –

+0

。你可以創建一個'Bundle'並把它作爲'setArguments(Bundle)'傳遞給片段,並且在你用'getArgument()'得到的片段裏面' – Budius

+0

我在這裏有一個小問題。由於用戶必須能夠返回並檢查前面的問題,對於每個FragmentReplace,我都給了addToBackStack。以前它工作正常。但現在開始改變文本和選項後,我無法使用這個功能:(因爲文本與設置爲最近瀏覽過的片段的文本保持一致所以,除了現在使用不同的片段之外沒有別的辦法嗎? –