Это мой код внутри моего адаптера:
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"
. Как мне добиться fill_parent в java? Вы можете увидеть, как я пытался это сделать в моем onBindViewHolder
. Я понял, почему это приводит к ошибке времени выполнения с «пустой ссылкой на объект»: мой getLayoutParams
не работает, потому что представление еще не назначено группе просмотра (правильно?). Когда менеджер компоновки (именно менеджер компоновки делает это, верно?) назначает представление группе просмотра (которой, как я предполагаю, является recyclerview) и как я могу получить свою кнопку после того, как это произошло, чтобы отредактировать ее Параметры макета?