我有一個錯誤,我知道發生了什麼,但不知道如何解決它。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,並確保它永不刪除任何頁面?
'onClick()'方法的其他部分是否工作?如果是這樣,那意味着你的onClick被解僱了,但你的更新方法不能按你喜歡的方式工作。如果onClick沒有被解僱,那麼當重新添加一個新的Fragment時,您可能無法正確地連接監聽器。你描述問題的方式使我認爲onPause() - > onDetach()方法中發生了一些事情,這使得你的按鈕變得混亂。基本上,要開始,仔細檢查update()是否在所有情況下都被調用,並且它正在跟蹤正確的代碼路徑。 – Jonathan
@Jonathan,我使用調試器來檢查,看起來onClick()方法的工作原理是,如果它的「新鮮」意味着它沒有脫離「offscreenlimit」。如果我離開屏幕限制並返回,則onclick()方法不再觸發。奇怪的是,動畫仍然有效。 – compprogjava
嗯,好吧。在外部片段的生命週期的哪一部分,你是否附加了該監聽器? – Jonathan