2015-11-07 90 views
1

在屏幕上,有一个ImageView有焦点。当新视图通过coolNavbarView.setVisiblity(View.GONE)显示时,新视图将会关注焦点。如果用户导航到新视图,则该视图应该能够变得可以聚焦,但是一旦显示它就不应该偷窥焦点。重点应放在已经有焦点的ImageView上。查看窃取可见性焦点,当变得可见

我知道是一个setFocusable(boolean)方法让视图变得焦点,有没有setStealFocusOnVisible(boolean)方法?

以下是它如何聚焦的堆栈跟踪。

com.mycompany.navbar.view.CoolThumbnailsView$1.onFocusChange(CoolThumbnailsView.java:94) 
android.view.View.onFocusChanged(View.java:5462) 
android.widget.AbsListView.onFocusChanged(AbsListView.java:2063) 
android.widget.ListView.onFocusChanged(ListView.java:3587) 
android.view.View.handleFocusGainInternal(View.java:5218) 
android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:651) 
android.view.View.requestFocusNoSearch(View.java:7937) 
android.view.View.requestFocus(View.java:7916) 
android.view.ViewGroup.requestFocus(ViewGroup.java:2612) 
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657) 
android.view.ViewGroup.requestFocus(ViewGroup.java:2613) 
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657) 
android.view.ViewGroup.requestFocus(ViewGroup.java:2613) 
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657) 
android.view.ViewGroup.requestFocus(ViewGroup.java:2613) 
android.view.View.requestFocus(View.java:7883) 
android.view.View.requestFocus(View.java:7862) 
android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:2982) 
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
android.view.View.setFlags(View.java:10008) 
android.view.View.setVisibility(View.java:6951) 
com.mycompany.navbar.view.CoolNavbarView.show(CoolNavbarView.java:99) 
com.mycompany.navbar.controller.CoolNavbarViewController.show(CoolNavbarViewController.java:292) 

回答

1

对我而言,ListView是偷窃焦点。我可以通过在使ListView可见之前从ListView中删除Focusable属性来修复它。

ListView v = ViewUtils.findViewById(view, listLayoutId, ListView.class); 
v.setFocusable(false);