ast*_*ter 5 android adapter android-viewholder android-tv listrowpresenter
我正在使用Android TV的默认项目.以下是在我的创建卡片的代码BrowseFragment:
private void loadRows() {
List<Movie> list = MovieList.setupMovies();
ListRowPresenter mListRowPresenter = new ListRowPresenter();
mRowsAdapter = new ArrayObjectAdapter(mListRowPresenter);
mListRowPresenter.setRowViewSelected(/*HOW TO GET VIEWHOLDER HERE?*/, false);
CardPresenter cardPresenter = new CardPresenter();
int i;
for (i = 0; i < NUM_ROWS; i++) {
if (i != 0) {
Collections.shuffle(list);
}
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
for (int j = 0; j < NUM_COLS; j++) {
listRowAdapter.add(list.get(j % 5));
}
HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]);
mRowsAdapter.add(new ListRow(header, listRowAdapter));
}
setAdapter(mRowsAdapter);
}
Run Code Online (Sandbox Code Playgroud)
我正在这样做,因为当我启动应用程序时,我不想让第一张行被选中.它应该只在用户按下Dpad上的按钮后被选中.如果我不能这样做,我该怎么办才能得到提到的行为?
您可以setRowViewSelected通过子类化 ListRowPresenter 并覆盖initializeRowViewHolder(RowPresenter.ViewHolder holder)
@Override
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {
super.initializeRowViewHolder(holder);
setRowViewSelected(holder, false);
}
Run Code Online (Sandbox Code Playgroud)
但我认为您不能在BrowseFragment使用这种方法时取消选择所有项目。
ItemViewSelectedListener尝试在加载数据后进行设置,而不是设置onActivityCreated为在首次启动时取消选择所有项目。
默认情况下,行的左上角项目始终会被选中,并且您无法在初始启动时拥有所有未选中的项目,可能的原因是:
BrowseFragment初始启动调用时的方法onItemSelected(第 1372-1382 行)mMainFragmentRowsAdapter.getSelectedPosition()
@Override
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row) {
int position = mMainFragmentRowsAdapter.getSelectedPosition(); //<--
if (DEBUG) Log.v(TAG, "row selected position " + position);
onRowSelected(position);
if (mExternalOnItemViewSelectedListener != null) { //<--
mExternalOnItemViewSelectedListener.onItemSelected(itemViewHolder, item,
rowViewHolder, row);
}
}
Run Code Online (Sandbox Code Playgroud)
其中getSelectedPosition()始终返回 0(第 483-485 行)
public int getSelectedPosition() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它还调用mExternalOnItemViewSelectedListener.onItemSelected您在应用程序mExternalOnItemViewSelectedListener中设置的 ItemViewSelectedListener 。MainFragment
因此,在初始启动时,第 0 行中的第 0 个项目被选择为默认选定项目,但如果您延迟设置,mExternalOnItemViewSelectedListener此调用将不会第一次到达您的项目选定侦听器。
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |