我有一個RecyclerView,爲此我有一個自定義適配器,並且我已經將LayoutManager設置爲FlexboxLayoutManager。對於每一個孩子,我想設置FlexGrow爲1RecyclerView getLayoutParams返回null(有時)
在谷歌的例子,演示貓畫廊(https://github.com/google/flexbox-layout),他們這樣做的ViewHolder:
void bindTo(Drawable drawable) {
mImageView.setImageDrawable(drawable);
ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
if (lp instanceof FlexboxLayoutManager.LayoutParams) {
FlexboxLayoutManager.LayoutParams flexboxLp = (FlexboxLayoutManager.LayoutParams) lp;
flexboxLp.setFlexGrow(1.0f);
}
}
這隨後被稱爲RecyclerView.Adapter在onBindViewHolder中。這工作正常,但當我在我的應用程序中做同樣的事情時,它只會爲某些項目設置FlexGrow,而不會在頂部設置FlexGrow。我意識到對於某些項目(看似隨機),getLayoutParams()返回null,但對於其他項目,它返回正確的FlexboxLayoutManager.LayoutParams。
我意識到了差異,在貓畫廊例如,onCreateViewHolder在做
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewholder_cat, parent, false);
return new CatViewHolder(view);
}
,而在我的應用我在做
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
return new MyViewHolder(new MyCustomView(getContext()));
}
似乎與該參考膨脹parent意味着getLayoutParams()不會爲null,因此將代碼更改爲
View v = new MyCustomView(getContext());
parent.addView(v);
return new MyViewHolder(v);
現在它正常工作,setFlexGrow()總是被設置。但是,這感覺不對 - 我知道你不打算向RecyclerView父項顯式添加視圖。
所以我的問題是:
1 - 爲什麼是隨機的LayoutParams空對某些項目,但罰款別人?
2 - 我怎樣才能讓LayoutParams始終處於設置狀態,而不會像'parent.addView(v);'那樣做一些可怕的事情,還是實際上這樣做可以嗎?
謝謝:)
NVM,實際上上述一個是完全沒有你在哪裏附接母體到視圖。 –
很高興知道,謝謝:) – Luke