将 OnClickListeners
设置为 RecyclerView
中的项目时,建议在内部类中执行此操作,如下所示:
public ViewHolder(View itemView) {
super(itemVIew);
nameTextView = (TextView) itemView.findViewById(R.id.item_name);
itemView.setOnClickListener(this);
}
当我看到设置文本的代码时,它通常位于 onBindViewHolder
方法中:
@Override
public void onBindViewHolder(SetPlayerNameViewHolder holder, int position) {
holder.nameTextView.setText(String.valueOf("Random Text"));
}
如果文本永远不会改变,它不应该在内部类中吗?
public ViewHolder(View itemView) {
super(itemVIew);
nameTextView = (TextView) itemView.findViewById(R.id.item_name);
nameTextView.setText(String.valueOf("Random Text"));
itemView.setOnClickListener(this);
}
编辑:如果您检索到的值对于所有 TextView
都不同,但在 RecyclerView
重新加载时不应更新,该怎么办
public ViewHolder(View itemView) {
super(itemVIew);
nameTextView = (TextView) itemView.findViewById(R.id.item_name);
// Not the actual methods, but to make it more readable
int i = itemView.getPosition()
String randomText = getTextFromDatabaseWhereRowIs(i)
nameTextView.setText(String.valueOf(randomText));
itemView.setOnClickListener(this);
}
最佳答案
是的,你是对的......
1. onBindViewHolder(..., intposition)
为 RecyclerView
的单个
项调用。如果每个 item
的 text
都不同,那么您应该使用 onBindViewHolder()
使用 position
来获取正确的文本
。
@Override
public void onBindViewHolder(SetPlayerNameViewHolder holder, int position) {
String item = YourList.get(position); // For example YourList is an ArrayList of String
holder.nameTextView.setText(item);
}
2.如果每个item
的text
是固定的,那么您可以按照您所说的从ViewHolder
设置它或者您可以使用 android:text="YOUR_TEXT"
从 TextView XML
修复它。
public ViewHolder(View itemView) {
super(itemVIew);
nameTextView = (TextView) itemView.findViewById(R.id.item_name);
nameTextView.setText("Random Text");
}
希望对你有帮助~
关于Android - 编程风格 - RecyclerView - 在 ViewHolder 或 onBindViewHolder 中使用 SetText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43560212/