2016-07-06 71 views
2

我有一個帶有四個標籤頁的應用程序,每個標籤頁有一些編輯文本,其中一些需要填充才能執行數據庫操作,因此當用戶按下「保存更改「按鈕的方法檢查那些編輯文本,並應該把你的第一個空的,這工作正常,但有一個問題:requestFocus();不會更改選項卡,如果編輯文本是在另一個。如何獲得View頁面中的父標籤頁

然後我試圖使用ViewPager.setCurrentItem(int)改變requestFocus();之前的標籤,但我無法弄清楚的是:

如何獲得編輯文本的標籤?

+0

其實我無法正確理解你的問題,你是否想要克服等當前標籤。 –

+0

@AmanJain不,空格編輯文本可能會也可能不會在當前標籤中,所以我想知道在女巫標籤中是否可以 –

+0

您可以將onFocusChange監聽器添加到您的標籤中。 –

回答

1

ViewPager類沒有這方面的方法。

甲相當哈克溶液可以是(假定使用的是FragmentStatePagerAdapter):上EditText

  • getParent()呼叫爲具有父片段所需的次數。所以,如果你有這樣的結構: 片段 - >的LinearLayout - >的EditText你應該叫getParent()兩次。然後將ViewParent投到Fragment。實際上,你可以用while循環週期,直到你找到了一個ViewParentFragment

  • 週期的一個實例,通過你的適配器片段

    for (int i = 0; i < adapter.getCount(); i++) { 
        if (adapter.getItem(i) == parentTakenBefore) { 
         viewPager.setCurrentItem(i); 
         break; 
        } 
    } 
    

    ,並檢查當前的項目是否是你的

它更多的黑客不能真正解決問題,而應該適用

希望^ h ELPS

UPDATE

新增通過父母

boolean isFragment = false; 
Fragment fragment = null; 
ViewParent currentParent = v.getParent(); 
while(!isFragment && currentParent != null){ 
    if (currentParent instanceof Fragment) { 
     fragment = (Fragment) currentParent(); 
     isFragment = true; 
    } 
    else { 
     currentParent = currentParent.getParent(); 
    } 
} 
+0

非常感謝幫助! [這是我終於做的](http://stackoverflow.com/a/38224106/6470431) –

+0

@WestsideTony更新了答案(在我看來)找到片段的更好的解決方案。它適用於不同的嵌套級別 – rsella

0

循環由於某種原因沒有View pageradapter代碼似乎認識到自己的孩子,我終於想出了一個解決方案。

首先創建的,其添加到尋呼機

static ArrayList<View> tabs= new ArrayList<>(); 

然後視圖列表時,添加新的選項卡也將其添加到列表中

tab= inflater.inflate(R.layout.any_tab, container, false); 
tabs.add(tab); 

最後實施類似的循環,如建議但這也尋找父母

//e=The empty text view; 

View v=e; 
Boolean b=true; 
int ctrl=0; 
while(b){ 
    v=(View)v.getParent();//this keep getting the parent view until reaches the tab 
    ctrl=0; 
    for(View t:tabs){ 
     if(v==t){ 
      b=false; 
      break;} 
     else{ctrl ++;} 
    } 
} 
mViewPager.setCurrentItem(ctrl);//this place you in the right tab 
e.requestFocus();//this focus the text view 
相關問題