【发布时间】:2018-02-22 23:22:42
【问题描述】:
下面是我想要实现的示例代码。
public class ToDoCursorAdapter extends CursorAdapter {
......
public ToDoCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
ViewHolderItem viewHolder = new ViewHolderItem();
View rowView = LayoutInflater.from(context).inflate(R.layout.listview, parent, false);
viewHolder.refTextV = (TextView) rowView.findViewById(R.id.refText);
viewHolder.buttonIRV = (Button) rowView.findViewById(R.id.buttonIR); //For Ref Text
.....
rowView.setTag(viewHolder);
return rowView;
}
@Override
public void bindView(final View view, final Context context, final Cursor cursor) {
final ViewHolderItem viewHolder = (ViewHolderItem) view.getTag();
......
viewHolder.refTextV.setText(ref);
......
}
public void hideShowAll(Button but) {
//I want to be able to acess BUTTONS/TEXTVIWEs from this function.
// Like viewHolder.refTextV.setText(ref) in binView
Toast.makeText(mContext, "Hello" , Toast.LENGTH_SHORT).show();
}
}
我正在尝试从适配器中的另一个函数访问 Button 中的 bindView 中的 Button、TextView 等视图元素。
另外,如果可以的话,请在您的答案中添加一些解释,以便我了解它的工作原理,并为将来学习一些东西。
谢谢
更新
我终于在我的hideShowAll() 中使用了notifyDataSetChanged();,而不是在那里访问ViewHolder。我将更改存储在一个数组中,然后调用notifyDataSetChanged()。它刷新了我的观点并反映了我想要基于数组进行的更改。
另外,我遇到了让它为我工作的问题,因为这里提到的一些 cmets 在 newView 之外声明 ViewHolder 就在 Constructor 之后。这不是一个好主意。您将得到错误的ViewHolder,而不是属于特定行的错误。
【问题讨论】:
-
在几乎所有情况下,您都不需要在外部访问它。用例是什么?您想在某些操作上更新一些/所有的 recyclerView 行吗?如果是,则更改相应元素的数据模型并调用 adapter.notifyItemChanged(position)。
-
问题是你不应该在 bindView 之外访问 ViewHolder。
-
@PraveenSingh Thi 函数
showHideAll()正在从按钮上的MainActivity调用我有一个保存元素状态(可见性)的数组。我可以用它来显示/隐藏元素,但问题是我不知道如何刷新(如果这是正确的术语)屏幕上的视图。其余视图将在滚动时生效,因为它们将引用数组的状态。这是我的第一个应用程序。 `adapter.notifyItemChanged(position)` 会刷新当前(屏幕上)视图的状态吗?感谢您的回复。 -
@PraveenSingh 我正在使用
ListView。我的适配器不建议notifyItemChanged()作为有效方法。我有notifyDataSetChanged(); -
@pskink 现在可见的那个。光标位置。其余视图将在重新循环时更新。我想更新用户按下按钮时屏幕上可见的那个。如果我能找到如何在不丢失变量(它们的值)的情况下刷新当前视图,那么我可能不需要访问 viewHolder。任何想法?我从
MainActivity尝试了notifyDataSetChanged();,但它似乎不起作用。
标签: android android-cursoradapter android-viewholder