【问题标题】: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 的按钮

标签: java android listview android-listview adapter


【解决方案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();
        }
    

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多