为什么setVisibility仅适用于setOnClickListener但不适用于onClick?

时间:2016-10-24 00:14:51

标签: android

我有两个语言按钮,我想在点击其中一个后隐藏它们。当我在XML文件中添加onClick事件并尝试隐藏按钮时,它不起作用。

这是我的代码:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button)findViewById(R.id.english);
        button2=(Button)findViewById(R.id.arabic);
        }

    public void on_english(View view) {
        button1.setVisibility(View.GONE);
        button2.setVisibility(View.GONE);
}

当我使用button1.setOnClickListener时效果很好:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1=(Button)findViewById(R.id.english);
    button2=(Button)findViewById(R.id.arabic);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            button1.setVisibility(View.GONE);
            button2.setVisibility(View.GONE);
        }
    });

使用onClick事件时,我的代码是否有任何错误?

为什么setVisibility仅适用于setOnClickListener? XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Start.MainActivity"
    android:background="@mipmap/back">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/label1"
        android:id="@+id/textView"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="English"
        android:id="@+id/english"
        android:onClick="on_english"
        android:layout_marginBottom="64dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:visibility="visible"
        android:layout_marginLeft="55dp"
        android:layout_marginStart="55dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="العربية"
        android:id="@+id/arabic"
        android:onClick="on_arabic"
        android:visibility="visible"
        android:layout_alignTop="@+id/english"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

</RelativeLayout>

感谢。

2 个答案:

答案 0 :(得分:0)

改为使用view.setVisibility()

编辑:使用view.getId()获取按钮的ID(R.id.yourButtonId)并执行if语句以设置可见性。

答案 1 :(得分:0)

为什么不这样做:

@Override
public void onClick(View view) {
    if (view == button1) {
        // if view == english

        button1.setVisibility(View.VISIBLE);
        button2.setVisibility(View.GONE);
    } else if (view == button2) {
        // if view == arabic

        button1.setVisibility(View.GONE);
        button2.setVisibility(View.VISIBLE);
    }
}

只需添加你的onCreate:

button1.setOnClickListener(this);
button2.setOnClickListener(this);

附加说明:您可以使用jake wharton提供的butterknife at this link进行观察注射。