Recyclerview:编辑视图的布局参数而不会膨胀

时间:2019-01-16 18:53:35

标签: android android-recyclerview recyclerview-layout

这是我的适配器中的代码:

public MyAdapter.MyViewHolder onCreateViewHolder (ViewGroup parent, int viewType){
    Button b = new Button(parent.getContext());
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AddExerciseActivity mActivity = (AddExerciseActivity) view.getContext();
            mActivity.startExercise(view);
        }
    });
    MyViewHolder vh = new MyViewHolder(b);
    return vh;
}

public void onBindViewHolder(MyViewHolder vh, int position){
    vh.mButton.setText(mDataset[position][0]);
    vh.mButton.setTag(mDataset[position][1]);
    ViewGroup.LayoutParams lp = vh.mButton.getLayoutParams();
    lp.width = ViewGroup.LayoutParams.FILL_PARENT;
    vh.mButton.setLayoutParams(lp);
}

如您所见,onCreateViewHolder中我没有给任何东西充气。我只是按普通按钮,不涉及自定义xml。如果选择了自定义XML,将很容易实现我想要的目标:android:layout_width="fill_parent"。如何在Java中实现fill_parent?您可以在onBindViewHolder中查看我的尝试方式。我已经理解了为什么这会导致运行时错误并显示“空对象引用”:我的getLayoutParams无法正常工作,因为该视图尚未分配给视图组(对吗?)。布局管理器(何时是布局管理器,是吗?)何时将视图分配给视图组(我认为是re​​cyclerview),并且在发生这种情况后如何获取按钮以编辑其视图LayoutParams?

1 个答案:

答案 0 :(得分:1)

虽然您可能有很多钩子可以窥视附加到RecyclerView(也许是RecyclerView#OnChildAttachStateChangeListener的项目视图,但我没有研究过),但我认为最好像这样在onCreateViewHolder()中分配布局参数:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Button b= new Button(parent.getContext());
    ViewGroup.LayoutParams lp =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    tv.setLayoutParams(lp);
    return new ItemViewHolder(b);
}

将视图项添加到RecyclerView时,将处理布局参数。