![](/img/trans.png)
[英]About RecyclerView.ViewHolder and RecyclerView.Adapter
[英]Android - changing textSize of TextView attached to ViewHolder in RecyclerView.Adapter
我在RecyclerView中使用GridLayoutManager來處理三種不同情況(1列,2列,3列),但是我還需要更改RecyclerView.Adapter中附加到ViewHolder的TextView的TextSize。
活動代碼:
mLayoutManager = new GridLayoutManager(this, numberOfColumns);
mRecyclerView = (RecyclerView) findViewById(R.id.grid);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CustomGridAdapter(data);
mRecyclerView.setAdapter(mAdapter);
適配器:
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_layout, viewGroup, false);
return new ViewHolder(itemView);
}
...
public class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
protected TextView vName;
protected ImageView vImage;
protected ImageButton vButton;
protected ProgressBar vProgress;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
vName = (TextView) itemLayoutView.findViewById(R.id.titleTextViewGrid);
vImage = (ImageView) itemLayoutView.findViewById(R.id.imageView);
vButton = (ImageButton) itemLayoutView.findViewById(R.id.action_edit_grid);
vProgress = (ProgressBar) itemLayoutView.findViewById(R.id.loadingProgressBar);
}
}
當我嘗試時:
TextView text = (TextView) mRecyclerView.findViewById(R.id.titleTextView);
text.setTextSize(12);
編譯器返回空引用。 有什么想法嗎?
看起來您看錯地方了。 您不會要求父級RecyclerView
引用每個子視圖中對TextView
的引用,您需要從每個子視圖中獲取該引用。
似乎最簡單的方法是在onCreateViewHolder()
內部:
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_layout, viewGroup, false);
TextView text = (TextView) itemView.findViewById(R.id.titleTextViewGrid);
text.setTextSize(12);
return new ViewHolder(itemView);
}
...或者在ViewHolder
創建期間:
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
vName = (TextView) itemLayoutView.findViewById(R.id.titleTextViewGrid);
vImage = (ImageView) itemLayoutView.findViewById(R.id.imageView);
vButton = (ImageButton) itemLayoutView.findViewById(R.id.action_edit_grid);
vProgress = (ProgressBar) itemLayoutView.findViewById(R.id.loadingProgressBar);
vName.setTextSize(12);
}
通過這種方式,可以為每個項目視圖進行設置,但只能在視圖的初始創建過程中進行設置。
我找到了一個很好的解決方案,謝謝Devunwired的指導。 當我期待:
他將layoutId傳遞給構造函數,因此我可以調用新的適配器:
CustomAdapter mAdapter = new CustomAdapter(data, numberOfColumns);
然后在CustomAdapter的CustomViewHolder中:
...
public class CustomViewHolder extends RecyclerView.ViewHolder {
protected TextView vName;
public CustomViewHolder(View itemLayoutView) {
super(itemLayoutView);
vName = (TextView) itemLayoutView.findViewById(R.id.titleTextView);
if (mLayoutId == 1) {
vName.setTextSize(33);
}
else if (mLayoutId == 2) {
vName.setTextSize(22);
}
else if (mLayoutId == 3) {
vName.setTextSize(11);
}
}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.