Android 如何在可扩展listview的某些子视图上动态显示图像

Android 如何在可扩展listview的某些子视图上动态显示图像,android,listview,Android,Listview,我试图弄清楚如何在可展开的listview中仅在一些子视图上显示图像。我需要根据组和子索引设置它。我试着按索引这样做: public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String laptop = (String) getChild(grou

我试图弄清楚如何在可展开的listview中仅在一些子视图上显示图像。我需要根据组和子索引设置它。我试着按索引这样做:

public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.child_item, null);
    }

    ImageView email = (ImageView) convertView.findViewById(R.id.email);
    //this shows the email icon where applicable
    if (groupPosition == 0 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    }
    if (groupPosition == 2 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    }

    item.setText(Html.fromHtml(laptop));
    return convertView;
}
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    View newView = inflater.inflate(R.layout.child_item, null);

    ImageView email = (ImageView) newView.findViewById(R.id.email);
    //this shows the email icon where applicable
    if (groupPosition == 0 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    } else
    if (groupPosition == 2 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    } else {
        email.setVisibility(View.VISIBLE);
    }

    item.setText(Html.fromHtml(laptop));
    return newView;
}

但是,当你开始向下滚动时,它开始将不同的设置为“消失”,因为回收工作是如何进行的。如何修复此问题以使其正常工作?

从外观上看,您不需要回收视图。如果你没有必要,就不要这样做。(所有的文档都让它听起来像一个要求,所有的例子都使用它,但它不是必需的。这只是“良好实践”,但当“良好实践”需要10倍于完成工作所需的时间时,它真的不是一个好实践,是吗??)

回收利用背后的概念与滚动浏览一长串物品有关。如果您的列表只包含几个项目,则不需要这样做

如果您最终需要,这将修复您的代码:

ImageView email = (ImageView) convertView.findViewById(R.id.email);
//this shows the email icon where applicable
if (groupPosition == 0 && childPosition == 0 ){
    email.setVisibility(View.GONE);
} else
if (groupPosition == 2 && childPosition == 0 ){
    email.setVisibility(View.GONE);
} else {
    email.setVisibility(View.VISIBLE);
}
如果不想循环使用视图,只需忽略以下内容:

public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.child_item, null);
    }

    ImageView email = (ImageView) convertView.findViewById(R.id.email);
    //this shows the email icon where applicable
    if (groupPosition == 0 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    }
    if (groupPosition == 2 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    }

    item.setText(Html.fromHtml(laptop));
    return convertView;
}
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    View newView = inflater.inflate(R.layout.child_item, null);

    ImageView email = (ImageView) newView.findViewById(R.id.email);
    //this shows the email icon where applicable
    if (groupPosition == 0 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    } else
    if (groupPosition == 2 && childPosition == 0 ){
        email.setVisibility(View.GONE);
    } else {
        email.setVisibility(View.VISIBLE);
    }

    item.setText(Html.fromHtml(laptop));
    return newView;
}

嗯,好吧,这很容易,我不知道我可以选择不回收视图。这是一个简单的改变,不回收他们?我编辑了我的答案演示如何不回收-convertView用于回收,它可以是一个痛苦。。。