我正在为Android TV开发一款应用。在我的应用程序中,需要使用类别名称显示视频缩略图类别。为了满足此要求,我使用Listview
来显示类别明确的缩略图。在ListView
中,每行包含一个显示类别名称的TextView和一个在水平方向上显示缩略图的Recyclerview
。为了横向显示缩略图,我使用ImageButton
来管理通过DPAD控制器的自动导航。当我按下DPAD UP和DOWN键时,所有工作正常,它从一个类别导航到另一个类别视频缩略图,当我按下左右DPAD键时它从一个缩略图导航到同一类别的另一个缩略图。但问题是它只能在可见的缩略图上导航。按下DPAD RIGHT键后选择最后一个缩略图后,水平Recyclerview
不会滚动显示下一个缩略图。它仅在可见项目上向右或向左导航,我的要求是它应该导航特定类别的所有缩略图。请帮帮我.......
下面是我的活动代码,其中包含Listview
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_screen_layout);
verticalListView = (ListView)findViewById(R.id.category_listview);
verticalListView.setItemsCanFocus(true);
verticalListView.setDividerHeight(30);
HomeCategoryListAdapter adapter = new HomeCategoryListAdapter(this,categoriesVideoList,categoryDataList);
verticalListView.setAdapter(adapter);
下面是我的ListAdapter类
public class HomeCategoryListAdapter extends BaseAdapter {
private Activity context;
private ArrayList<ArrayList<VideoContentModel>> categoriesVideoList;
private ArrayList<CategoryModel> categoryDataList;
private LayoutInflater inflater = null;
public HomeCategoryListAdapter(Activity context,
ArrayList<ArrayList<VideoContentModel>> categoriesVideoList,
ArrayList<CategoryModel> categoryDataList) {
super();
this.context = context;
this.categoriesVideoList = categoriesVideoList;
this.categoryDataList = categoryDataList;
inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return categoryDataList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.cat_name_vertical_row, null);
RecyclerView recyclerView = (RecyclerView)vi.findViewById(R.id.horizontal_recyclerview);
TextView cateTitleName = (TextView)vi.findViewById(R.id.cat_title_name);
cateTitleName.setText(categoryDataList.get(position).getCatTitle());
LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
CategoryContentThumbnailAdapter adapter = new CategoryContentThumbnailAdapter(context,categoriesVideoList.get(position),
categoryDataList.get(position).getCatDfpTag());
recyclerView.setAdapter(adapter);
return vi;
}
}
下面是Recyclerview适配器类
public class CategoryContentThumbnailAdapter extends
RecyclerView.Adapter<CategoryContentThumbnailAdapter.MyViewHolder> {
Activity context;
int focusedItem = 0;
ArrayList<VideoContentModel> catVideoList;
String dfpTag;
public CategoryContentThumbnailAdapter(Activity context,ArrayList<VideoContentModel> catVideoList, String dfpTag) {
super();
this.context = context;
this.catVideoList = catVideoList;
this.dfpTag = dfpTag;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.cat_row_thumbnail, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
VideoContentModel model = catVideoList.get(position);
try {
new com.calkins.imageloder.ImageLoader(context, 156, 1).DisplayImage(model.getVideoThumbnailUrl(),older.imageButton);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return catVideoList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageButton imageButton;
public MyViewHolder(View itemView) {
super(itemView);
imageButton = (ImageButton) itemView
.findViewById(R.id.cat_button_thumabnail);
}
}
}