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

时间:2015-05-16 15:06:53

标签: android visibility custom-lists

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

我已尝试在我的适配器类中使用以下代码,但是在我单击图像视图2次&相对布局未在正确的位置打开。此外,当相对布局变得可见时,我将在其单击侦听器上的下一个活动上进行迁移。

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 );
            }
        }); 
有人请建议我做错了什么。提前谢谢。

1 个答案:

答案 0 :(得分:2)

也许你的标签位置不正确。您可以查看以下代码:

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