如何在垂直列表视图中创建水平列表视图?
How to create an Horizontal List View inside of a Vertical List View?
我已成功在垂直列表视图中添加列表视图。
我的问题是水平列表视图。有人可以向我解释我应该如何创建水平 ListView 吗?
我应该切换到 Recycler View 来创建水平列表吗?或者我坚持使用 ListView?
感谢您的帮助!
使用带有 Horizontal LinearLayout 的 RecyclerView 作为带有 Vertical LinearLayoutManager 的垂直 RecyclerView 的项目视图。是的,如果您现在正在从头开始创建视图,请始终使用 Recycler View 而不是 ListView。
如果您还有问题,您需要在 getView 中扩充布局,然后查看此 Answer。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.horizontal_list_item, null,false);
LinearLayout mainLinnerLayout=(LinearLayout)convertView.findViewById(R.id.mainLinear);
for (int i = 0; i <5; i++) {
View additionView = inflater.inflate(R.layout.inner_layout_file, null,false);
LinearLayout innerLinnerLayout=(LinearLayout)additionView.findViewById(R.id.inner_layout);
// If the width varies for each innerLinnerLayout, then remove the if block & always calculate padding value
// padding is an integer initialized to -1 in the constructor
if (padding == -1) {
int width = context.getResources().getDisplayMetrics().widthPixels;
innerLinnerLayout.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
padding = width - additionView.getMeasuredWidth();
}
// I've set padding to right only, but you could center it by giving left and right padding of value=(padding/2)
innerLinnerLayout.setPadding(0, 0, padding, 0);
mainLinnerLayout.addView(innerLinnerLayout);
}
return convertView;
}
我已成功在垂直列表视图中添加列表视图。 我的问题是水平列表视图。有人可以向我解释我应该如何创建水平 ListView 吗? 我应该切换到 Recycler View 来创建水平列表吗?或者我坚持使用 ListView?
感谢您的帮助!
使用带有 Horizontal LinearLayout 的 RecyclerView 作为带有 Vertical LinearLayoutManager 的垂直 RecyclerView 的项目视图。是的,如果您现在正在从头开始创建视图,请始终使用 Recycler View 而不是 ListView。
如果您还有问题,您需要在 getView 中扩充布局,然后查看此 Answer。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.horizontal_list_item, null,false);
LinearLayout mainLinnerLayout=(LinearLayout)convertView.findViewById(R.id.mainLinear);
for (int i = 0; i <5; i++) {
View additionView = inflater.inflate(R.layout.inner_layout_file, null,false);
LinearLayout innerLinnerLayout=(LinearLayout)additionView.findViewById(R.id.inner_layout);
// If the width varies for each innerLinnerLayout, then remove the if block & always calculate padding value
// padding is an integer initialized to -1 in the constructor
if (padding == -1) {
int width = context.getResources().getDisplayMetrics().widthPixels;
innerLinnerLayout.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
padding = width - additionView.getMeasuredWidth();
}
// I've set padding to right only, but you could center it by giving left and right padding of value=(padding/2)
innerLinnerLayout.setPadding(0, 0, padding, 0);
mainLinnerLayout.addView(innerLinnerLayout);
}
return convertView;
}