2013-07-24 39 views
3

我有一個錯誤,我知道發生了什麼,但不知道如何解決它。Viewpager,但沒有響應clicklistener/

我有一個viewpager其中每個單獨的片段還包含兩個更多的片段 - 正面和背面。該應用程序基本上是一個閃卡應用程序,你可以刷卡下一張卡,當你點擊它轉向另一側。

我的問題: 我有一套雙面可用的單選按鈕。如果用戶檢查一個按鈕並單擊該卡,卡應該轉動,並且新選擇的單選按鈕選項也應該出現在卡的另一側。兩側按鈕的功能是相同的 - 我只是將它放在兩側,以便用戶可以選擇更改單選按鈕,而不管他/她在閃存卡的正面還是背面。如果您選擇單選按鈕,單選按鈕在另一端更改的部分僅適用於每張牌是新鮮的。如果您滾動離屏界限並向後滑動,該功能不再有效(另一側的單選按鈕不會自動更改爲新選擇的單選按鈕)。但由於我的offscreenlimit是2,因此如果您滾動到下一張即時貼,然後向後滾動,它仍然有效。

我收聽我的外片段內

  final ViewAnimator viewAnimator1 = (ViewAnimator) viewFlipper; 
     viewAnimator1.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       ((definitionFragment) definitionFragment1).update(); 
       ((wordFragment) wordFragment1).update();    
       AnimationFactory.flipTransition(viewAnimator1, FlipDirection.RIGHT_LEFT); 
       final FragmentTransaction transaction3 = getChildFragmentManager().beginTransaction(); 
       transaction3.detach(definitionFragment1); 
       transaction3.add(R.id.fragment_definition, definitionFragment1); 
       final FragmentTransaction transaction4 = getChildFragmentManager().beginTransaction(); 
       transaction4.detach(wordFragment1); 
       transaction4.add(R.id.fragment_word, wordFragment1); 

      } 

更新梅託德:

public void update(){ 
    DatabaseHandler db1 = new DatabaseHandler(getActivity()); 
    List<VocabWord>words1 = db1.getAllVocabWords(); 
    switch(words1.get(pagenumber).getCategory()) 
     { 
     case 0: 
      mDefaultButton.setChecked(true); 
      break; 

     case 1: 
      mRedButton.setChecked(true); 
      break; 

     case 2: 
      mYellowButton.setChecked(true); 
      break; 


     case 3: 
      mGreenButton.setChecked(true); 
      break; 

     } 


} 

任何人有任何想法如何處理呢?或者是否有人知道如何設置不存在的offpagepagelimit,並確保它永不刪除任何頁面?

+0

'onClick()'方法的其他部分是否工作?如果是這樣,那意味着你的onClick被解僱了,但你的更新方法不能按你喜歡的方式工作。如果onClick沒有被解僱,那麼當重新添加一個新的Fragment時,您可能無法正確地連接監聽器。你描述問題的方式使我認爲onPause() - > onDetach()方法中發生了一些事情,這使得你的按鈕變得混亂。基本上,要開始,仔細檢查update()是否在所有情況下都被調用,並且它正在跟蹤正確的代碼路徑。 – Jonathan

+0

@Jonathan,我使用調試器來檢查,看起來onClick()方法的工作原理是,如果它的「新鮮」意味着它沒有脫離「offscreenlimit」。如果我離開屏幕限制並返回,則onclick()方法不再觸發。奇怪的是,動畫仍然有效。 – compprogjava

+0

嗯,好吧。在外部片段的生命週期的哪一部分,你是否附加了該監聽器? – Jonathan

回答

0

這個答案花了我3個星期才解決!我做錯了,而不是分離和添加你只是簡單地使用「替換」的片段。