【问题标题】:setvisibility(view.visible) not working after setvisibility(view.gone)setvisibility(view.visible)在setvisibility(view.gone)之后不起作用
【发布时间】:2013-04-17 22:32:37
【问题描述】:

我看到了一些关于这个的帖子,我理解了这个问题。但是怎么能绕过去呢?我有 ListView 带有可以展开的项目,但是一旦视图消失,它就不能再次可见,除非它有可用空间。怎么做那个空间?

private void mySetOnItemListener() {
    l.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View view,
            int position, long arg3) {
        Log.d("onItemClick","called");
        LinearLayout ll = (LinearLayout)view.findViewById(R.id.llOpenedField);
        ll.setVisibility(View.VISIBLE);
    }
    });
}

我的视图布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:descendantFocusability="blocksDescendants">

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:weightSum="5" >

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="0px"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="4"
            android:padding="7dp"
            android:text="item"
            android:textColor="@android:color/background_dark"
            android:textSize="25dp" />
    </LinearLayout>

      <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/llOpenedField"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"

         >

        <ImageButton
            android:id="@+id/ibInformation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/info" />

    </LinearLayout>

</LinearLayout>

LinearLayoutandroid:id="@+id/llOpenedField" 是我在开始时尝试制作的gone

我把 gone 属性放在 getView() 里面 BaseAdapter

【问题讨论】:

    标签: android listview view visibility onitemclicklistener


    【解决方案1】:

    试试这个并根据你的需要修改,这不是我点击的列表项

    制作线性布局android:visibility="gone";首先做这个。

    @Override
        public void onClick(View v)
        {
            LinearLayout ll = (LinearLayout)findViewById(R.id.vis);
    
            if(v == ex)
            {
                if(ll.getVisibility() == View.VISIBLE)
                    ll.setVisibility(View.GONE);
                else
                    ll.setVisibility(View.VISIBLE);
            }
    

    更新 :- 这些是给你的..这将正确展开和折叠,并且不会有可用空间

    if(ll.getVisibility() == View.VISIBLE)
                        ll.setVisibility(View.GONE);
                    else
                        ll.setVisibility(View.VISIBLE);
    

    【讨论】:

    • 此代码将在单击列表项后在隐藏和展开其他布局或视图时正常工作。
    • if(v == ex) 中的“ex”代表什么?
    【解决方案2】:

    如果您将使元素可见的代码放入其 onClickListener 中,它将无法访问(如果它不占用任何屏幕空间,您将无法单击它)。您应该在其下方放置一个最小高度的布局,当您的视图 l 消失时,新的布局外壳变得可见,并且它应该获得可见的 onClickListener。这样,在您的 View 消失后,这个新布局将能够将其恢复。

    【讨论】:

      【解决方案3】:

      请检查此答案。这个答案对我有用。

      TranslateAnimation translateAnimation = new TranslateAnimation(0, 50, 0, 0);
                int animationTime = 200;
                translateAnimation.setDuration(animationTime);
                translateAnimation.setFillEnabled(true);
                translateAnimation.setFillAfter(true);
                yourView.startAnimation(translateAnimation);
                yourView.setVisibility(View.VISIBLE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 2015-12-18
        • 1970-01-01
        • 2020-10-31
        • 2016-09-07
        相关资源
        最近更新 更多