如何解决RecyclerView 的 onBindViewHolder() 不会将 List 中的 TextView 绑定到 ViewHolder
我有这个 RecyclerView Adapter,它保存了一个视图对象列表(TextViews 和 ImageViews)
我有一个自定义 ViewHolder,它有一个 TextView 成员数据
在 onBindViewHolder 中,我试图将自定义 ViewHolder 的 TextView 成员数据绑定到 List
中的 TextView
日志立即显示正确的文本,但在回调返回默认文本“TextView”后打印到屏幕
这是我的课:
public class UnwantedRealityAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
Context mContext;
String habitPath;
List<View> list;
public UnwantedRealityAdapter(Context context,int id){
mContext = context;
habitPath = context.getExternalFilesDir(null).getPath() + "/" + String.format("%05d",id) + ".txt";
getFileToList();
}
/**
* all file lines start with a digit that indicates what is the content of the line
* 1 text
* 2 image path
*/
public void getFileToList() {
// open the file to read
list = new ArrayList<>();
try {
BufferedReader bufferedReader = new BufferedReader( new FileReader(habitPath) );
String line;
TextView tv;
ImageView imageView;
while((line = bufferedReader.readLine())!=null){
if(line.charAt(0) == '1'){ // text
tv = new TextView(mContext);
tv.setText(line.substring(1));
list.add(tv);
}
else{
imageView = new ImageView(mContext);
imageView.setImageURI(Uri.fromFile(new File(line.substring(1))));
list.add(imageView);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public int getItemViewType(int position) {
if(list.get(position) instanceof TextView)
return 1;
if(list.get(position) instanceof ImageView)
return 2;
return -1; // error
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view;
switch(viewType){
case 1:
view = LayoutInflater.from(mContext).inflate(R.layout.text_item,parent,false);
TextViewHolder textViewHolder = new TextViewHolder(view);
return textViewHolder;
case 2:
view = LayoutInflater.from(mContext).inflate(R.layout.image_item,false);
ImageViewHolder imageViewHolder = new ImageViewHolder(view);
return imageViewHolder;
default:
return null;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {
int viewType = getItemViewType(position);
switch(viewType){
case 1:
//THIS IS THE PROBLEMATIC LINE
((TextViewHolder)holder).textView = (TextView) list.get(position);
Log.i("===","at position: "+ position + " text is: " + ((TextViewHolder)holder).textView.getText());
// this log shows correct output
break;
case 2:
((ImageViewHolder)holder).imageView = (ImageView) list.get(position);
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
class TextViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public TextViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
class ImageViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
}
}
}
我不想使用 setText 方法:
((TextViewHolder)holder).textView.setText( ( (TextView) list.get(position) ).getText() );
请指教
为什么 TextView 指针在回调返回后又把它的值改回来了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。