Android listview中的保持架不保留要显示的flipview布局
我正在创建一个包含餐厅菜单的可扩展列表视图。当用户单击其中一个项目时,他会看到该项目的详细信息(例如,单击“鳄梨卷”行会显示一个新的布局,显示“鳄梨、螃蟹、大米”) 以下是标准视图的屏幕截图: (我无法发布照片,因为我是新用户,但以下是用户看到listview时会看到的内容: 产品说明 产品说明 产品详细信息(不同格式) 产品说明 产品说明 这个想法是默认的功能是食物的名称;如果用户点击(或滑动,最终-但现在让我们保持简单),他应该会看到描述(黑色)…问题是,当我滚动黑色行切换回原始默认格式。(当我试图让界面“记住”用户单击的位置并按住这些按钮,以便用户知道他点了什么时,问题会变得更加严重——这显然与我不了解支架的工作原理有关!) 我在每一行中都使用了一个viewflipper,它工作得非常好-快速可靠。而且当我单击时,只有一行被选中,这很好 我唯一的问题是,当我滚动时,我无法让支架记住viewflipper的状态。因此每次滚动时它都会重置 例如,在牛排示例中,如果我在行中显示细节视图,然后向下和向上滚动,行中的视图将返回到名称“鳄梨卷”。显然,我没有正确实现支架,因此它会记住viewflipper值,但就我而言,在24小时的尝试后,我无法解决这个问题 以下是我的适配器代码: 展开菜单适配器,以便了解列表所指的内容:Android listview中的保持架不保留要显示的flipview布局,android,listview,viewflipper,Android,Listview,Viewflipper,我正在创建一个包含餐厅菜单的可扩展列表视图。当用户单击其中一个项目时,他会看到该项目的详细信息(例如,单击“鳄梨卷”行会显示一个新的布局,显示“鳄梨、螃蟹、大米”) 以下是标准视图的屏幕截图: (我无法发布照片,因为我是新用户,但以下是用户看到listview时会看到的内容: 产品说明 产品说明 产品详细信息(不同格式) 产品说明 产品说明 这个想法是默认的功能是食物的名称;如果用户点击(或滑动,最终-但现在让我们保持简单),他应该会看到描述(黑色)…问题是,当我滚动黑色行切换回原始默认格式。(
public ExpandMenuAdapter(Context passedContext, ArrayList<ExpandOptionsGroup> passedGroupList){
this.context = passedContext;
this.groupList = passedGroupList;
}
请附上一个屏幕截图以便进一步理解。我还可以看到你没有在getView方法中修改rowFlipper状态。你好@GeorgyGobonov,我无法发布图像,但添加了文本。感谢你的回复。“修改rowFlipper状态”是什么意思?我告诉它“显示下一步”;然后我还应该将它登陆的视图设置为当前视图?你可以将你的屏幕截图发布到外部网站并在此处提供链接。解决了它。代码有很多问题……一旦修复,我明白每次应用打开时我都需要创建一个单独的数组,以便存储单击的按钮和显示的视图这四天都很艰难,但我自己做对的回报是无与伦比的。
@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();
}
}