Android 如何切换相对布局的可见性&;列表视图行中的图像视图?

Android 如何切换相对布局的可见性&;列表视图行中的图像视图?,android,visibility,custom-lists,Android,Visibility,Custom Lists,我有一个列表视图,在每行的末尾包含一个图像视图。我想做的是,当我点击它时,必须使其他布局可见。通过布局,我的意思是,我有一个相对的布局,包括一个图像视图&一个文本视图,用于列表视图的每一行,其可见性最初设置为GONE 我在adapter类中尝试了以下代码,但在我单击了两次图像视图后,相对布局仍然可见&相对布局没有在正确的位置打开。此外,当相对布局变得可见时,我将在其click listener上迁移下一个活动 holder.rowImageView.setTag(position);

我有一个列表视图,在每行的末尾包含一个图像视图。我想做的是,当我点击它时,必须使其他布局可见。通过布局,我的意思是,我有一个相对的布局,包括一个图像视图&一个文本视图,用于列表视图的每一行,其可见性最初设置为GONE

我在adapter类中尝试了以下代码,但在我单击了两次图像视图后,相对布局仍然可见&相对布局没有在正确的位置打开。此外,当相对布局变得可见时,我将在其click listener上迁移下一个活动

holder.rowImageView.setTag(position);
        holder.rowImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = (Integer) view.getTag();
                holder.rowRelativeLayout.setVisibility(View.VISIBLE);
                notifyDataSetChanged();
            }
        });

        holder.rowRelativeLayout.setTag(position);
        holder.rowRelativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getContext(), OrderActivity.class);
                intent .putExtra("ProductId", gettersSetters.getVoucherId());
                intent .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                context.startActivity(intent );
            }
        }); 

请有人指出我做错了什么。提前谢谢。

也许您在标签上的位置不正确。您可以检查以下代码:

    public View getView (int position, View convertView, ViewGroup parent){
        if( convertView == null ){
            ...
            holder.imageView.setTag(position);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.rowImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = (int) view.getTag();
                View rowEffect = getViewByPosition(position, (ListView)parent);
               rowEffect.findViewById(R.id.rowRelativeLayout).setVisibility(View.VISIBLE);
                notifyDataSetChanged();
            }
        });
        holder.rowRelativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ...
            }
       });
   }



private View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
} 
public View getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
...
支架.imageView.setTag(位置);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.rowImageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
int position=(int)view.getTag();
View rowEffect=getViewByPosition(position,(ListView)父级);
rowEffect.findViewById(R.id.rowRelativeLayout).setVisibility(View.VISIBLE);
notifyDataSetChanged();
}
});
holder.rowRelativeLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
...
}
});
}
私有视图getViewByPosition(int pos、ListView ListView){
final int firstListItemPosition=listView.getFirstVisiblePosition();
final int lastListItemPosition=firstListItemPosition+listView.getChildCount()-1;
if(poslastListItemPosition){
返回listView.getAdapter().getView(pos,null,listView);
}否则{
final int childIndex=pos-firstListItemPosition;
返回listView.getChildAt(childIndex);
}
} 

这对我不起作用。当我点击任何一行的图像视图时,最后一行的相对布局就会显示出来。是的,因为此时holder对象运行到最后一行的位置,所以想法是“你需要找到与点击图像位置相同的rowRelativeLayout”。你可以看到我编辑过的答案。当然,这不是最好的解决方案,你可以通过更多的调查来找到更好的解决方案。非常感谢你给出了完美的答案+我为你保留了一个。我还需要一个帮助。我希望一次只显示一个相对布局。如何做到这一点?这意味着,如果我单击图像视图&一个相对布局以前是可见的,那么它必须隐藏自己。我只是想告诉您:1)当rowRelativeLayout可见时-->将位置保存在全局变量中。2) 单击imageView-->从上面保存的位置获取视图并隐藏其行RelativeLayout-->时,显示当前效果(这在旧代码中完成)。注意*:位置和保存的位置必须位于屏幕上可见的行[firstListItemPosition,lastListItemPosition]内。3) 设置Listview onScroll listener,当其滚动时,从保存位置隐藏rowRelativeLayout。