5 回答

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊
實現(xiàn)此方案的簡單方法是,您所要做的就是創(chuàng)建一個同時包含圖像和文本的視圖,在回收器適配器中檢查圖像數(shù)據(jù)是否可用,使圖像的可見性可見,否則圖像可見性消失。
第二種方法是為 創(chuàng)建多個視圖。RecyclerView
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder called");
ContentItem item = mContentItems.get(position);
if(item.getName()!=null){
holder.textName.setVisibility(View.Visible);
holder.textName.setText(item.getName());
}else{
holder.textName.setVisibility(View.GONE);
}
if(item.getPreviewImageDefault()!=null){
holder.imageIcon.setVisibility(View.Visible)
Picasso.with(mContext).load("file://" + item.getPreviewImageDefault()).into(holder.imageIcon);
}else{
holder.imageIcon.setVisibility(View.GONE)
}
}

TA貢獻(xiàn)1811條經(jīng)驗 獲得超5個贊

TA貢獻(xiàn)1827條經(jīng)驗 獲得超9個贊
如果你想隱藏圖像,你可以這樣做(支持將可繪制的id作為整數(shù)返回):ic_launcherdata.getImage()
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
if(mItems!=null){
AdapterData data = mItems.get(i);
viewHolder.text.setText(data.getText());
viewHolder.image.setImageResource(data.getImage());
if(TextUtils.isEmpty(data.getText())){
viewHolder.text.setVisibility(View.GONE);
}else{
viewHolder.text.setVisibility(View.VISIBLE);
}
if(data.getImage()==R.drawable.ic_launcher){
viewHolder.image.setVisibility(View.GONE);
}else{
viewHolder.image.setVisibility(View.VISIBLE);
}
}
}

TA貢獻(xiàn)2016條經(jīng)驗 獲得超9個贊
一種可能的解決方案,就像有些人已經(jīng)說過的那樣,是隱藏/顯示圖像視圖。
您可以在用于回收站視圖的視圖管理器中執(zhí)行此操作。
class OptionalImageViewHolder extends RecyclerView.ViewHolder {
private ImageView image;
private TextView text;
// any other views you have
public OptionalImageViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.yourImageViewIdHere);
text = itemView.findViewById(R.id.yourTextViewIdHere);
// same for any other views you have
}
public void bindView(Tweet tweet) {
// This is where the magic happens
// Note: I make the assumption that you have a class called "Tweet"
// that has a field for "text", a field for "image" (that can be
// null if there's no image), and any other necessary fields.
text.setText(tweet.getTweetText());
if (tweet.hasImage() /* function that returns whether or not there is an image */) {
image.setVisibility(View.VISIBLE);
image.setImageBitmap(tweet.getImage()); // or however you are setting the image
} else {
// else just make the image invisible
image.setVisibility(View.GONE);
}
}
}
希望這能給你一個想法。

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
回收視圖支持不同的視圖類型(布局),這是在這種情況下的正確方法。例如,
class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
override fun getViewTypes(position:Int) =
if (mydata[position].hasImage) return R.layout.mylayout_with_image
else R.layout.mylayout_no_image;
override fun onCreateViewHolder(viewType:Int, parent:ViewGroup) : MyViewHolder =
// here viewType = layout id
MyViewHolder(layoutInflater.inflate(viewType, parent))
override fun onBindViewHolder(viewHolder:MyViewHolder, position:Int) {
// guaranteed viewHolder.itemView is the view you want for that position
}
}
添加回答
舉報