我正在Android TV上使用ViewPager/TabLayout,有两个问题。
1)目前,如果我按DPAD_UP,焦点会移到选项卡上,但是页面实际上不会更改到与所选选项卡相对应的页面,直到按下DPAD_CENTER。因此,聚焦(以灰色框围绕标签文本显示)和选中(以下划线显示)之间存在差异。我想知道是否可能让任何获得焦点的对象被选中?
2)我的ViewPager中有3个选项卡,其中选项卡1中的片段需要获得焦点才能正常显示。当我从选项卡3切换到选项卡1时,焦点没有移动到片段,而仍停留在选项卡上。这会导致我的片段无法正常显示。我想知道是否有一种方法可以将焦点从选项卡中移开?我查看了ViewPager和TabLayout的源代码,我知道焦点是在TabLayout的TabView上,但无论我尝试什么,都不能夺取TabView的焦点状态(即灰色框围绕着标签文本,直到我使用DPAD_DOWN“向下”到达片段)。
尝试
((ViewGroup) tabLayout.getChildAt(0)).getChildAt(desiredPosition).clearFocus()
,但没有帮助。
我不想使用viewPager.setOffscreenPageLimit(2);
// This is my viewpager activity class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
adapterViewPager = new MyPagerAdapter(getFragmentManager());
viewPager.setAdapter(adapterViewPager);
// Give the TabLayout the ViewPager
TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
// Tried to clear focus of tab here, didn't help
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
public static class MyPagerAdapter extends FragmentPagerAdapter {
private static int NUM_ITEMS = 3;
public MyPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
// Returns total number of pages.
@Override
public int getCount() {
return NUM_ITEMS;
}
// Returns the fragment to display for a particular page.
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new OneFragment; // This is the fragment that needs focus
case 1:
return new TwoFragment();
case 2:
return new ThreeFragment();
default:
return null;
}
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return "Fragment 1";
} else if (position == 1) {
return "Fragment 2";
} else {
return "Fragment 3";
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
android:theme="@style/AppThemeTab" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</RelativeLayout>
非常感谢您的帮助!如有需要,请随时联系我们。