下面是我想要實現的示例代碼。Android:如何從外部bindView()方法訪問viewHolder?
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
。
另外,如果可以的話,請添加一點解釋,以便我能夠理解它的工作原理,並可能爲未來學習某些內容。
謝謝
更新
我終於在我的hideShowAll()
使用notifyDataSetChanged();
而不是在那裏訪問ViewHolder
。我將更改存儲在數組中,然後調用notifyDataSetChanged()
。它刷新了我的觀點,並根據陣列反映了我想要做出的更改。
此外,我有問題得到它爲我工作,因爲這裏提到的一些意見宣稱ViewHolder
newView
之後Constructor
。這不是一個好主意。你會得到錯誤的ViewHolder
,而不是屬於某一行的。
幾乎在所有的情況下,你並不需要外部訪問它。 什麼是用例?您想在某些操作中更新某些/所有recyclerView行嗎?如果是,則更改相應元素的數據模型並調用adapter.notifyItemChanged(position)。 –
事情是**你不應該訪問ViewHolder外部bindView **。 –
@PraveenSingh Thi函數'showHideAll()'正在通過'MainActivity'在一個Button上調用我有一個數組來保存元素的狀態(可見性)。我可以用它來顯示/隱藏元素,但問題是我不知道如何刷新(如果這是適當的術語)屏幕上的視圖。其餘視圖將在滾動上生效,因爲它們將引用數組的狀態。 這是我的第一個應用程序。 'adapter.notifyItemChanged(position)'刷新當前(屏幕上)視圖的狀態嗎? 感謝您的回覆。 –