我正在创建一个包含餐馆菜单的可扩展列表视图。当用户点击其中一个项目时,他会看到该项目的详细信息(例如,点击“鳄梨卷”行显示一个新的布局,上面写着“牛油果,螃蟹,米饭”)。
以下是标准视图的截图:
(我无法发布照片,因为我是新手,但如果他看到列表视图,用户会看到这些:
产品说明
产品说明
产品详情(格式不同)
产品说明
产品说明
这个想法是默认的特色是食品的名称;如果用户点击(或滑动,最终 - 但让我们现在保持简单)他应该看到描述(黑色)..问题是,当我滚动黑色行切换回原始默认格式。 (当我试图让界面“记住”用户点击并按下那些按钮以便用户可以知道他订购的内容时,问题会变得更加严重 - 这显然与我不了解持有人的工作原理!)
我在每一行中使用了一个viewflipper,它运行良好 - 快速可靠。我点击时也只选择了一行,这很不错。
我唯一的问题是当我滚动时,我无法让持有者记住viewflipper的状态。所以每次滚动都会重置。
例如,在牛排示例中,如果我在行中显示详细视图,然后向下滚动并向上滚动,则行中的视图将返回名称“avocado roll”。很明显,我没有正确实现持有人,所以它记得viewflipper值,但对于我的生活,我无法在24小时的尝试后弄清楚这一点!
这是我的适配器代码:
ExpandMenu Adapter,以便您知道列表所指的内容:
public ExpandMenuAdapter(Context passedContext, ArrayList<ExpandOptionsGroup> passedGroupList){
this.context = passedContext;
this.groupList = passedGroupList;
}
getChildView代码:这是我认为持有者问题但我无法识别的地方!
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
View rowView = null;
String[] child = getChild(groupPosition, childPosition);
if (rowView == null){
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
rowView = infalInflater.inflate(R.layout.item_row, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.itemName = (TextView) rowView.findViewById(R.id.tvItem);
viewHolder.itemPrice = (TextView) rowView.findViewById(R.id.tvPrice);
viewHolder.itemDetail = (TextView) rowView.findViewById(R.id.tvDetail);
viewHolder.itemLayout = (LinearLayout) rowView.findViewById(R.id.item_layout);
viewHolder.rowFlipper = (ViewFlipper) rowView.findViewById(R.id.item_row_flipper);
viewHolder.itemLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewHolder.rowFlipper.showNext();
Toast.makeText(context, "You clicked", Toast.LENGTH_SHORT).show();
}
});
rowView.setTag(viewHolder);
viewHolder.rowFlipper.setTag(groupList.get(groupPosition));
}else{
rowView = convertView;
((ViewHolder) rowView.getTag()).rowFlipper.setTag(groupList.get(groupPosition));
}
ViewHolder holder = (ViewHolder) rowView.getTag();
//holder.rowFlipper.set(groupList.get(groupPosition)); CLEARLY THIS IS WRONG
holder.itemName.setText(child[MenuXMLGettersSetters.ELEMENT_NAME]);
holder.itemDetail.setText(child[MenuXMLGettersSetters.ELEMENT_DETAIL]);
if(!child[MenuXMLGettersSetters.ELEMENT_PRICE].isEmpty()){
holder.itemPrice.setText("$"+child[MenuXMLGettersSetters.ELEMENT_PRICE]);
}else{
holder.itemPrice.setText("");
}
return rowView;
}
private static class ViewHolder {
public TextView itemName;
public TextView itemPrice;
public TextView itemDetail;
public LinearLayout itemLayout;
public ViewFlipper rowFlipper;
private void getViewHolderDetail(){
itemDetail.isShown();
}
}