以下是我想要实现的示例代码。
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
中的TextView
,bindView
等视图元素。
另外,如果可以的话,请添加一些解释,以便我能够理解它是如何工作的,并且可以为将来学习一些东西。
谢谢
更新
我最终在我的notifyDataSetChanged();
中使用了hideShowAll()
,而不是在那里访问ViewHolder
。我在数组中存储了更改,然后调用notifyDataSetChanged()
。它刷新了我的观点并反映了我想根据数组做出的改变。
另外,我遇到了问题,因为这里提到的一些评论是在ViewHolder
之后newView
之后宣布Constructor
。这不是一个好主意。您将错误ViewHolder
而不是属于特定行的那个。
答案 0 :(得分:0)
尝试将下面的' ViewHolderItem viewHolder '声明为构造函数,并将所有Override方法和init声明为 bindView 方法
答案 1 :(得分:0)
首先,在全球范围内初始化您的ViewHolderItem
,然后您就可以在另一个Button
中访问您的观看内容,例如TextView
,method
等。
public class ToDoCursorAdapter extends CursorAdapter {
......
// initialize ViewHolderItem here
ViewHolderItem viewHolder = new ViewHolderItem();
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
//remove this line here
// 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;
}
public void hideShowAll(Button but) {
//call it like this and do what you want
viewHolder.buttonIRV.setEnabled(false);
Toast.makeText(mContext, "Hello" , Toast.LENGTH_SHORT).show();
}
希望它会帮助你。
答案 2 :(得分:0)
试试这个:
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, ViewHolderItem viewHolder) {
//I want to be able to acess BUTTONS/TEXTVIWEs from this function.
viewHolder.refTextV.setText("hello");
Toast.makeText(mContext, "Hello" , Toast.LENGTH_SHORT).show();
}
}