如何在列表视图项中显示和隐藏视图?

Posted

技术标签:

【中文标题】如何在列表视图项中显示和隐藏视图?【英文标题】:how to visible and hide view in listview item? 【发布时间】:2015-01-15 13:39:42 【问题描述】:

我有一个列表视图,在列表视图中我有一个文本视图。所以这个文本视图在列表视图的每一项中都是可见的。因此,当我单击任何 Textview 时,它的可见性必须消失。但是,当我单击另一个文本视图时,当前必须消失,而上一个必须可见。 在适配器类中我尝试了很多东西,但我没有找到正确的方法。那么如何在 getView() 中得到这个东西。

holder.floorNo.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                if (holder.floorNo.getId() == v.getId()) 
                    final int position1 = listView
                            .getPositionForView((LinearLayout) v
                                    .getParent());

                 else 
                
            
        );

这里的 position1 是点击的当前位置。请帮帮我。

【问题讨论】:

这项工作是使用 javabeen getset 方法完成的,只要您单击名为 notifatdatasetchange 的按钮 【参考方案1】:

您可以将 textview 的标签设置为 holder.settag(holder.floorNo)。在 floorNo 的点击列表中,通过 Textview floorno = (Textview) v.gettag() 获取此标签; 在这里,您将获得单击的文本视图并为可见/不可见添加代码。

【讨论】:

【参考方案2】:

我不知道您使用的是哪个适配器。如果您使用的是 CursorAdapter,那么在 CursorAdapter 中通过覆盖方法 newView() 是可能的

  @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) 
        ((TextView) (convertView
            .findViewById(R.id.main_body_item_title_second_pics)))
            .setOnClickListener(new OnClickListener() 
                @Override
                public void onClick(View view) 
                    // do your stub here

                
            );
        

【讨论】:

我正在使用 ArrayAdapter【参考方案3】:

您可以使用 textview 类成员作为“提醒”以了解隐藏了哪个 textview,如下所示:

private View mHiddenView = null 
private int mFloorNoId = 0
....
....


    holder.floorNo.setOnClickListener(new OnClickListener() 
        @Override
        public void onClick(View v) 
            if(mHiddenView !=null&&mFloorNoId!=0)
                // Show textview that was hidden
                mHiddenView.findViewById(mFloorNoId).setVisibility(VISIBLE);
            
            // Assign clicked view to hidden one and FloorNo id 
            mHiddenView = v;
            mFloorNoId = holder.floorNo.getId();
            // And hide it
            mHiddenView.findViewById(mFloorNoId).setVisibility(GONE);
               
    );

【讨论】:

我只需要隐藏“holder.floorNo”并显示相同的内容。那么我将如何实现呢? floorNo 是 textview 吗?如果是,您可以在mHiddenTextview = (Textview) v; 中使用它代替 v 是的,但它不起作用。我想我需要在每次点击 textview 时刷新列表视图,但我不知道怎么可能。 您可以通过在适配器上/内调用 notifyDataSetChanged 来刷新列表视图 但我无法在 onClick() 中调用 notifyDataSetChange()。【参考方案4】:

在适配器中维护一个布尔值列表,指示 TextView holder.floorNo 的可见性。

boolean[] visibilityArray;

在构造函数中

 visibilityArray; = new boolean[ no. Of Elements in your adapter ];

在getView()方法中

 holder.floorNo.setVisibility(visibilityArray[position]);   



         holder.floorNo.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 

                notifyStateChange(position);
            
        );

notifyStateChange(position)方法定义如下

private void notifyStateChange(int position) 

        for(int i = 0; i<visibilityArray.length; i++)

visibilityArray[i] = true;
        
visibilityArray[position] = false;
this.notifyDataSetChanged();
    

【讨论】:

以上是关于如何在列表视图项中显示和隐藏视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动列表视图上显示/隐藏底部导航视图?

在列表视图中显示或隐藏对象

Android - 无法从列表项中增加或减少值

在列表视图项中动态设置图像视图很慢

如何在 Swift 中隐藏/删除空表视图行?

显示/隐藏项目 - 列表视图