处理Onclick事件,视图可见性消失/可见

时间:2015-02-16 19:59:08

标签: android view visibility

我解释了我的问题。

我有一个视图,其中有两个按钮和两个editText。 如果我触摸button1,我想显示edidText1。 如果我触摸button2,我想显示edidText2。

在我的布局中,edidText1的可见性可见,edidText2的可见性消失了。

My_Layout.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_gravity="center"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/btn_comments1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/form_comments"/>

        <Button
            android:id="@+id/btn_comments2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>
    <EditText
        android:id="@+id/et_comments1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:gravity="top" />


    <EditText
        android:id="@+id/et_comments2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:gravity="top" />

</LinearLayout>

在我的onCreate函数

final EditText etComments1 = (EditText) alertDialogView.findViewById(R.id.et_comments);
etComments1.setText(comment1);
etComments1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        Toast.makeText(context, "TODO_1", Toast.LENGTH_LONG).show();
    }
});

final EditText etComments2 = (EditText) alertDialogView.findViewById(R.id.et_mes_corr);
etComments2.setText(comment2);
etComments2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        Toast.makeText(context, "TODO_2", Toast.LENGTH_LONG).show();
    }
});


final Button btnComments1 = (Button) alertDialogView.findViewById(R.id.btn_comments1);
final Button btnComments2 = (Button) alertDialogView.findViewById(R.id.btn_comments2);

btnComments2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        etComments1.setVisibility(View.INVISIBLE);
        etComments2.setVisibility(View.VISIBLE);
    }
});

btnComments1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        etComments1.setVisibility(View.VISIBLE);
        etComments2.setVisibility(View.INVISIBLE);
    }
});

首次点击我的etComments1时,会调用TODO_1。 点击我的btnComments2以显示etComments2后,当我点击它时,不会调用TODO_2。 点击我的btnComments1以显示etComments1后,当我点击它时,不会调用TODO_1。

所以我认为可以来看看。走了。所以我在onClick on按钮上也实现了这个事件,但问题仍然是一样的。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

添加android:focusable="false"android:clickable="true"后,我认为问题是EditText正在关注第一次点击,然后第二次点击会调用收听者。

尝试添加

android:focusableInTouchMode="false"

到你的EditText,这应该允许一次点击来呼叫听众。

答案 1 :(得分:0)

修改

问题出在布局文件中,有些在代码中。你已经使用了可见性:已经去了edittext2,如果你阅读了doc,那么你就会理解&#34;去了&#34;意味着&#34;完全隐藏,就像没有添加视图一样。&#34;

所以你不应该使用&#34;去掉#34;如果要保留视图属性。为什么你宣布你的变量是最终的?没有必要。我希望它有所帮助:)

布局:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<EditText
    android:id="@+id/et_comments1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="visible"
    android:gravity="top" />


<EditText
    android:id="@+id/et_comments2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="invisible"
    android:gravity="top" />

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_comments1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button 1"/>

    <Button
        android:text="button 2"
        android:id="@+id/btn_comments2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

MainActivity:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * Created by sonnet on 2/17/15.
 */
public class MainActivity extends Activity {

Button button1;
Button button2;

EditText editText1;
EditText editText2;

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

    button1 = (Button) findViewById(R.id.btn_comments1);
    button2 = (Button) findViewById(R.id.btn_comments2);

    editText1 = (EditText) findViewById(R.id.et_comments1);
    editText2 = (EditText) findViewById(R.id.et_comments2);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText1.setVisibility(View.VISIBLE);
            editText2.setVisibility(View.INVISIBLE);

            int height = 0;
            int width = 0;

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
            editText2.setLayoutParams(params);

            height = FrameLayout.LayoutParams.WRAP_CONTENT;
            width = FrameLayout.LayoutParams.MATCH_PARENT;

            params = new LinearLayout.LayoutParams(width, height);
            editText1.setLayoutParams(params);
        }
    });

    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText1.setVisibility(View.INVISIBLE);
            editText2.setVisibility(View.VISIBLE);

            int height = 0;
            int width = 0;

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
            editText1.setLayoutParams(params);

            height = FrameLayout.LayoutParams.WRAP_CONTENT;
            width = FrameLayout.LayoutParams.MATCH_PARENT;

            params = new LinearLayout.LayoutParams(width, height);
            editText2.setLayoutParams(params);

        }
    });


    editText1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "edittext1 is clicked", Toast.LENGTH_SHORT).show();
        }
    });

    editText2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "edittext2 is clicked", Toast.LENGTH_SHORT).show();
        }
    });

}
}