我有一個帶有四個標籤頁的應用程序,每個標籤頁有一些編輯文本,其中一些需要填充才能執行數據庫操作,因此當用戶按下「保存更改「按鈕的方法檢查那些編輯文本,並應該把你的第一個空的,這工作正常,但有一個問題:requestFocus();
不會更改選項卡,如果編輯文本是在另一個。如何獲得View頁面中的父標籤頁
然後我試圖使用ViewPager.setCurrentItem(int)
改變requestFocus();
之前的標籤,但我無法弄清楚的是:
如何獲得編輯文本的標籤?
我有一個帶有四個標籤頁的應用程序,每個標籤頁有一些編輯文本,其中一些需要填充才能執行數據庫操作,因此當用戶按下「保存更改「按鈕的方法檢查那些編輯文本,並應該把你的第一個空的,這工作正常,但有一個問題:requestFocus();
不會更改選項卡,如果編輯文本是在另一個。如何獲得View頁面中的父標籤頁
然後我試圖使用ViewPager.setCurrentItem(int)
改變requestFocus();
之前的標籤,但我無法弄清楚的是:
如何獲得編輯文本的標籤?
ViewPager
類沒有這方面的方法。
甲相當哈克溶液可以是(假定使用的是FragmentStatePagerAdapter
):上EditText
getParent()
呼叫爲具有父片段所需的次數。所以,如果你有這樣的結構: 片段 - >的LinearLayout - >的EditText你應該叫getParent()
兩次。然後將ViewParent
投到Fragment
。實際上,你可以用while
循環週期,直到你找到了一個ViewParent
是Fragment
週期的一個實例,通過你的適配器片段
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();
}
}
非常感謝幫助! [這是我終於做的](http://stackoverflow.com/a/38224106/6470431) –
@WestsideTony更新了答案(在我看來)找到片段的更好的解決方案。它適用於不同的嵌套級別 – rsella
循環由於某種原因沒有View pager
或adapter
代碼似乎認識到自己的孩子,我終於想出了一個解決方案。
首先創建的,其添加到尋呼機
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
其實我無法正確理解你的問題,你是否想要克服等當前標籤。 –
@AmanJain不,空格編輯文本可能會也可能不會在當前標籤中,所以我想知道在女巫標籤中是否可以 –
您可以將onFocusChange監聽器添加到您的標籤中。 –