0

我正在创建一个包含餐厅菜单的可扩展列表视图。当用户单击其中一个项目时,他会看到该项目的详细信息(例如,单击“鳄梨卷”行会显示一个新布局,其中显示“鳄梨、螃蟹、米饭”)。

这是标准视图的屏幕截图:

(我不能发布照片,因为我是新手,但如果用户看到列表视图,则会看到以下内容:

产品描述

产品描述

产品详情(不同格式)

产品描述

产品描述

这个想法是默认功能是食物的名称;如果用户点击(或最终滑动 - 但现在让我们保持简单),他应该看到描述(黑色)。问题是,当我滚动黑色行时切换回原始默认格式。(当我试图让界面“记住”用户单击并按住这些按钮时,问题将变得更加严重,以便用户知道他点了什么 - 这显然与我不了解持有人的工作原理有关!)

我在每一行内都使用了一个取景器,它运行良好 - 快速且可靠。当我单击时,也只选择了一行,这很好。

我唯一的问题是当我滚动时我无法让持有者记住取景器的状态。所以每次我滚动它都会重置。

例如,在牛排示例中,如果我在行中显示详细视图,然后向下滚动并向后滚动,则该行中的视图将返回名称“avocado roll”。显然,我没有正确实施支架,所以它记住了取景器的价值,但在我的一生中,经过 24 小时的尝试,我无法弄清楚这一点!

这是我的适配器代码:

ExpandMenu 适配器,以便您了解列表所指的内容:

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();
    }
}
4

0 回答 0