如何在listview项目中查看和隐藏视图?

时间:2014-11-18 11:22:22

标签: java android listview android-listview adapter

我有一个列表视图,在列表视图中我有一个textview。因此,此文本视图在listview的每个项目中都可见。因此,当我点击任何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是click的当前位置。请帮助我。

4 个答案:

答案 0 :(得分:1)

您可以将textview的标记设置为holder.settag(holder.floorNo)。点击楼层lister没有得到这个标签Textview floorno =(Textview)v.gettag(); 在这里,您将获得单击的textview并添加可见/不可见的代码。

答案 1 :(得分:0)

您可以使用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);
        }       
    });

答案 2 :(得分:0)

我不知道你正在使用哪个适配器。如果你正在使用CursorAdapter,那么在CursorAdapter中通过overridien方法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

                }
            });
        }

答案 3 :(得分:0)

在适配器中维护一个boolean列表,指示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();
    }