Android View仍然可以通过将其可见性设置为GONE

时间:2015-06-15 09:25:33

标签: android visibility onclicklistener

我知道关于这个问题的问题很少,但所有问题都在使用动画。我的活动中根本没有动画。我有一个TextView,默认情况下是可见的,并根据我在Splash屏幕中显示的功能标记设置为Gone。

这是我的xml文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/profile_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/profile_bg"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingTop="?android:actionBarSize">

    <TextView
            android:id="@+id/payments_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="6dp"
            android:background="@drawable/profile_payment_bg"
            android:clickable="true"
            android:drawableLeft="@drawable/ic_profile_payment"
            android:drawablePadding="8dp"
            android:gravity="center_vertical"
            android:onClick="onClick"
            android:padding="8dp"
            android:text="Payment"
            android:textAppearance="?android:textAppearanceMedium"
            android:textColor="@android:color/white" />

...

    </LinearLayout>

</FrameLayout>

虽然我将Clickable和OnClickListener功能分别设置为false和null,但即使我的“付款”按钮不可见,也会调用OnClick()功能:(

@Override
    protected void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_profile);

        this.mPayments = (TextView) findViewById(R.id.payments_btn);

        // Check if payment functionality available for the Passenger
        final PassengerFeatureResponse cachedFeature = FeatureResponse.fromJsonString(PreferenceUtils.getFeatureResponse(this));
        if (cachedFeature == null || !cachedFeature.isMade())
        {
            this.mPayments.setVisibility(View.GONE);
            this.mPayments.setClickable(false);
            this.mPayments.setOnClickListener(null);
        }
    }

我甚至尝试从xml文件设置Gone的可见性,并将其设置为可见代码,但功能相同:(

这可能是因为我已经从xml文件中定义了onClick功能,如果我从代码中设置了点击监听器,我的问题就会得到解决,但是,我正在寻找以这种方式修复问题。

任何建议都将不胜感激。感谢。

3 个答案:

答案 0 :(得分:0)

FrameLayout上试试这个

  this.frameMain= (FrameLayout) findViewById(R.id.profile_layout);
       if (cachedFeature == null || !cachedFeature.isMade())
        {
            this.mPayments.setVisibility(View.GONE);
            this.mPayments.setClickable(false);
            this.mPayments.setOnClickListener(null);
            this.frameMain.invalidate();
        }

答案 1 :(得分:0)

在这些行之后:

        this.mPayments.setVisibility(View.GONE);
        this.mPayments.setClickable(false);

添加以下行:

        this.mPayments.setFocusable(false);
        this.mPayments.setFocusableInTouchMode(false);

** 编辑 **

忽略可聚焦的代码段并尝试禁用此视图:

         this.mPayments.setEnabled(false);

您可以检查视图是否可以接收点击事件以确保所有内容都是礼仪:

         this.mPayments.isClickable(); // Indicates whether this view reacts to click events or not.

如果上述内容显示为false,则不应对点击事件作出反应。

答案 2 :(得分:0)

使用onClick模式时,必须在类中实现的方法上定义View作为参数。

也许您可以将开关与视图的ID一起使用,然后检查payments_btn是否仍然可见,只有在可见时才会触发您的操作。