【发布时间】:2014-11-12 14:28:22
【问题描述】:
这是我第一次尝试实现RecyclerView。我在Adapter 和ViewHolder 类之间实现了一个Callback 接口来处理UI 元素(按钮)上的点击事件。我在获取对单击发生的ViewHolder 的引用时遇到问题。我可以单击列表中第一项的Button,但是我定义的操作是在最后一个viewholder 上执行的我的回收站视图。我终于想通了通过我的界面传递位置,但我很难理解如何从中获取对该视图的引用。
public class RoomAdapter extends RecyclerView.Adapter<RoomAdapter.RoomViewHolder>
{
List<Room> mRooms;
public RoomAdapter(List<Room> rooms) {
mRooms = rooms;
}
@Override
public RoomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
final View viewItem = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.room_rv_item,viewGroup,false);
return vh = new RoomViewHolder(viewItem,new IRoomViewClick() {
@Override
public void editname(int pos) {
}
});
}
@Override
public void onBindViewHolder(RoomViewHolder roomViewHolder, int i) {
Room r = getItem(i);
roomViewHolder.label.setText(r.name);
}
public Room getItem(int position)
{
return mRooms.get(position);
}
@Override
public long getItemId(int position) {
return mRooms.get(position).getId();
}
@Override
public int getItemCount() {
return mRooms.size();
}
public static class RoomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
TextView label;
Button editBtn;
LinearLayout labelView;
Button saveBtn;
Button deleteBtn;
EditText editNameET;
IRoomViewClick mListener;
public RoomViewHolder(View itemView, IRoomViewClick listener) {
super(itemView);
labelView = (LinearLayout) itemView.findViewById(R.id.labelview);
mListener = listener;
editBtn =(Button) itemView.findViewById(R.id.editbtn);
editBtn.setOnClickListener(this);
label = (TextView) itemView.findViewById(R.id.room_listitem_label);
}
@Override
public void onClick(View view) {
int pos = getPosition();
mListener.editname(pos);
}
}
public static interface IRoomViewClick
{
public void editname(int pos);
}
}
【问题讨论】:
-
这不只是让我获得按钮的引用而不是 ViewHolder 本身吗?
-
嘿...我没有仔细阅读问题...我认为您需要一个职位(因为我没有在您的代码中看到 getPosition() 的主体)...但是是的,你可以把 ViewHolder 放在那里......但是你不会知道位置,因为......好吧,它是 RecyclerView 并且视图/viewholder可以......回收......
-
是的,我错过了在我的代码中实现 getPosition() 函数。那可能没有帮助。我仍然不完全清楚设置和获取标签,并将其转换为我可以操作的 ViewHolder。
-
标签是一个对象。你可以放任何对象,但是在得到它之后你必须将它转换为适当的类
-
我明白了,我在生命周期的哪个阶段设置和获取标签,我标记什么对象,我用什么标记它?
标签: android android-recyclerview