【发布时间】:2018-10-26 10:30:22
【问题描述】:
所以我有一个水平滚动视图,里面有 recyclerView。 我希望在 onCreateViewHolder 中膨胀的项目行是动态的,而不是静态 xml,因为我不知道会有多少列,我还需要从 web 服务中设置一些文本,我不知道如何在viewholder的onBind方法中实现
这是我的适配器
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
RecyclerView.ViewHolder holder;
// View v = inflater.inflate(R.layout.exec_category_sales_row,parent, false);
CustomView itemView = new CustomView(parent.getContext());
itemView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
final ViewHolder viewHolder = (ViewHolder) holder;
((ViewHolder) holder).customView.setUser(arylstCategoryWiseSales.get(position));
}
private class ViewHolder extends RecyclerView.ViewHolder {
private CustomView customView;
public ViewHolder(View v) {
super(v);
customView = (CustomView) v;
}
我的自定义视图类
public class CustomView extends RelativeLayout {
private CategoryWiseSalesModel user;
private TextView textView;
// override all constructors to ensure custom logic runs in all cases
public CustomView(Context context) {
this(context, null);
}
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomView(
Context context,
AttributeSet attrs,
int defStyleAttr,
int defStyleRes
) {
super(context, attrs, defStyleAttr, defStyleRes);
inflate(getContext(), R.layout.custom_layout, this);
textView = findViewById(R.id.textView);
}
//called in onBindViewHolder
public void setUser(CategoryWiseSalesModel newUser) {
user = newUser;
textView.setText(user.getLights());
}
}
不同的视图类型对我不起作用,因为项目行是完全动态的。 我也想过使用 tablelayout,但我有延迟加载逻辑 onScroll 在这里进行。
这个怎么办???
【问题讨论】:
-
您是否希望每一行都有不同的布局,因为您不知道每行的列数?
-
不,每一行将具有相同的列数,具体取决于 Web 服务,这可能会发生变化,例如今天它可以在行内有 3 个文本视图,第二天根据来自服务的数据在行中有 5 个文本视图,正如我所说。 .感谢您的快速回复
-
好的,您是否尝试过使用编程生成文本视图?
-
我是否需要在 OnbindViewHolder 中生成这些文本视图,它可能会在滚动时搞砸?如果我错了请纠正我
-
不,您将在 CreateViewHolder 上创建 TextView。膨胀 XML 后,即空白布局。然后,您将生成 Textview 并添加到您的布局中。
标签: android android-recyclerview