我有一個關於RecyclerView的問題。我試圖學習RecyclerView,但我堅持一個問題。我正在動態創建所有視圖。所以,假設我有一個ContentLinearLayout。我的問題始於「refreshContent」方法。我打了幾次電話。但是,即使在第一次調用時,RecyclerView的內部視圖仍保留在它們的背景圖像大小中(我猜在某處有一些隱式的WRAP_CONTENT)。我無法找到將按鈕的高度和寬度均衡到RecyclerView高度的方法。我試着迭代RecyclerView併爲每個孩子設置佈局參數,但它沒有奏效。此外,我試圖在「onBindViewHolder」內設置佈局參數,但這也不起作用。RecyclerView內視圖的正確大小
任何幫助將不勝感激。
public class ContentLinearLayout extends LinearLayout {
private RecyclerView rvCon;
private LinearLayout llCon;
public ContentLinearLayout(Context context) {
super(context);
this.init(context);
}
public ContentLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.init(context);
}
private void init(Context c){
this.setOrientation(LinearLayout.VERTICAL);
this.setBaselineAligned(false);
rvCon = new RecyclerView(c);
LinearLayout.LayoutParams recyclerPrms = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1f);
recyclerPrms.setMargins(0, 0, 0, 0);
rvCon.setLayoutParams(recyclerPrms);
LinearLayoutManager manager = new LinearLayoutManager(c, LinearLayoutManager.HORIZONTAL, false);
rvCon.setLayoutManager(manager);
addView(rvCon);
rvCon.setPadding(0, 0, 0, 0);
LinearLayout llCon = new LinearLayout(c);
llCon.setOrientation(LinearLayout.HORIZONTAL);
llCon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 3f));
llCon.setBaselineAligned(false);
addView(container);
...
}
private void refreshContent(Context ctx, Content content){
rvCon.setAdapter(new ContentAdapter(ctx, content));
}
}
public class ContentAdapter extends RecyclerView.Adapter<ImageButtonHolder>{
private Context mContext;
private Content mContent;
public ContentAdapter(Context c, Content content){
mContext = c;
mContent = content
}
@Override
public int getItemCount() {
return content.size();
}
@Override
public void onBindViewHolder(ImageButtonHolder buttonHolder, int pos) {
}
@Override
public ImageButtonHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
ImageButton b = new ImageButton(mContext);
b.setBackgroundColor(Color.RED);
ImageButtonHolder holder = new ImageButtonHolder(b);
return holder;
}
}
public class ImageButtonHolder extends RecyclerView.ViewHolder {
public final ImageButton imageButton;
public ImageButtonHolder(ImageButton button) {
super(button);
imageButton = button;
}
}
......在您的ContentAdapter中是非常錯誤的。 每次RV需要一個新的視圖,你增加'num',並且當調用getItemCount()時,你將返回'num.get()'。這是兩件無關的事情。 'onCreateViewHolder(ViewGroup parent,int type)',這裏的第二個參數是視圖的類型。創建一個新的視圖不應該改變適配器的大小。你可以檢查[這裏](https://developer.android.com/training/material/lists-cards.html)例如房車的使用情況。 – yigit
好吧,我沒有想到它會在第一時間有關。所以,我編輯了。 –