尝试使用 LeanbackTabLayout 和 LeanbackViewPager 在我的 AndroidTv 应用程序中创建顶部导航,但不知何故我的 rowsAdapter 为 null 并在 setAdapter 上崩溃。当我调试时,我看到 ListRow 不为空。我做错了什么?
家庭活动:
public class HomeActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
LeanbackTabLayout leanbackTabLayout = ActivityCompat.requireViewById(this, R.id.tablayout);
leanbackTabLayout.setFocusable(true);
LeanbackViewPager leanbackViewPager = ActivityCompat.requireViewById(this, R.id.viewpager);
TablayoutAdapter adapter = new TablayoutAdapter(getSupportFragmentManager(), 3);
leanbackViewPager.setAdapter(adapter);
leanbackTabLayout.setupWithViewPager(leanbackViewPager);
}
}
Tablayout 适配器:
public class TablayoutAdapter extends FragmentStatePagerAdapter {
int tabCount;
public TablayoutAdapter(@NonNull FragmentManager fm, int tabCount) {
super(fm);
this.tabCount = tabCount;
}
@NonNull
@Override
public Fragment getItem(int position) {
return new HomeFragment();
}
@Override
public int getCount() {
return tabCount;
}
}
HomeActivity xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity">
<androidx.leanback.tab.LeanbackTabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:nextFocusDown="@id/viewpager"
/>
<androidx.leanback.tab.LeanbackViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
主页片段:
public class HomeFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListRowPresenter lrp = new ListRowPresenter();
final CardPresenter cardPresenter = new CardPresenter();
ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(lrp);
for (int i = 0; i < 3; ++i) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
listRowAdapter.add(new Navigation("Tab1"));
listRowAdapter.add(new Navigation("Tab2"));
listRowAdapter.add(new Navigation("Tab3"));
HeaderItem header = new HeaderItem(i, "Row " + i);
System.out.println(header);
System.out.println("hello");
rowsAdapter.add(new ListRow(header, listRowAdapter));
}
RowsSupportFragment rowsSupportFragment = (RowsSupportFragment) getChildFragmentManager().findFragmentById(R.id.row1);
System.out.println(rowsAdapter);
System.out.println("hello");
rowsSupportFragment.setAdapter(rowsAdapter);
}
}
HomeFragment xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/row1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>