按钮setOnClickListener不仅适用于一个按钮

时间:2015-11-19 16:03:09

标签: java android button onclicklistener

我的活动中有两个不同的按钮,还有一个if语句来显示它们......

我的if语句运行良好并显示正确的按钮,但当我点击它时,其中一个按钮没有做任何事情! (实际上,它根本不可点击!)

        if (isNeeded)
        {
            // buttonImportant is not clickable
            buttonImportant.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.d("LOG", "Clicked!"); // Even this log won't work!
                    Intent intentDetailsActivity = new Intent(MainActivity.this, DetailsActivity.class);
                    intentDetailsActivity.putExtra("extraPosition", String.valueOf(position));
                    startActivity(intentDetailsActivity);
                }

            });

            linearLayoutImportant.setVisibility(View.VISIBLE); // This line is working
        }

        if (!isNeeded)
        {
            // buttonNormal is working well!
            buttonNormal.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    linearLayoutNormal.setVisibility(View.GONE);

                    Intent intentDetailsActivity = new Intent(MainActivity.this, DetailsActivity.class);
                    intentDetailsActivity.putExtra("extraPosition", String.valueOf(position));
                    startActivity(intentDetailsActivity);
                }

            });

            linearLayoutNormal.setVisibility(View.VISIBLE); // And this one is not working too!
        }

问题是,它不会返回任何错误或日志,知道问题是什么!它的日志我禁用了按钮......(我没有这样做)

我检查了它是否有声明,但一切都被宣布好了......

我检查了XML,那里也没问题:

<LinearLayout 
    android:id="@+id/linearLayoutImportant"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="50dp"
    android:layout_centerInParent="true"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical"
    android:visibility="gone" >

    <TextView 
        android:id="@+id/textViewImportant"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/important"
        android:textSize="20sp"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

    <Button 
        android:id="@+id/buttonImportant"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="@string/details" />

</LinearLayout>

...
...

<LinearLayout
    android:id="@+id/linearLayoutNormal"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_marginTop="25dp"
    android:orientation="vertical"
    android:visibility="gone" >

    <Button 
        android:id="@+id/buttonClose"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="end"
        android:background="@android:drawable/ic_menu_close_clear_cancel" />

    <TextView 
        android:id="@+id/textViewNormal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:layout_gravity="center_horizontal"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/normal"
        android:textStyle="bold" />

    <Button 
        android:id="@+id/buttonNormal"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_margin="2dp"
        android:layout_gravity="center_horizontal"
        android:text="@string/details" />

</LinearLayout>

编辑:

这是声明:

LinearLayout linearLayoutImportant, linearLayoutNormal;
Button buttonImportant, buttonClose, buttonNormal;

...
...

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

    linearLayoutImportant = (LinearLayout) findViewById(R.id.linearLayoutImportant );

    buttonImportant = (Button) findViewById(R.id.buttonImportant);

    buttonClose = (Button) findViewById(R.id.buttonClose);
    buttonClose .setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            linearLayoutNormal.setVisibility(View.GONE);
        }

    });

    buttonNormal = (Button) findViewById(R.id.buttonNormal);

    linearLayoutNormal = (LinearLayout) findViewById(R.id.linearLayoutNormal);
}

编辑2:

好吧,伙计们,也许我没有说清楚......

isNeeded是一个变量,我从另一个地方控制它......

当我将其设为false时,第二个if将会很好地执行,当我将其设为true时,第一个if也将执行,但只有按钮不可点击!

编辑3:

我还检查了.setEnabled(true);.setClickable(true);,仍然无效...:/

解决:

我使用了HierarchyViewer并发现了问题。问题出在XML ......我在第二个按钮上面有一个ListView,但是它是空的,所以我什么也没想到......

对不起每个人......

5 个答案:

答案 0 :(得分:1)

我使用了HierarchyViewer并发现了问题。问题出在XML ......我在第二个按钮上面有一个ListView,但是它是空的,所以我觉得没有什么...

对不起每个人......

答案 1 :(得分:0)

尝试不使用if语句,以便知道是否是验证问题并且您只设置一个侦听器

答案 2 :(得分:0)

布尔变量isNeeded只能取两个值中的一个,无论是true还是false。因此,只会执行一个if条件。

由于只有一个条件成立,因此您只需将onClickListener设置为其中一个按钮,因此另一个按钮不会被点击,而onClick中的日志消息也是如此方法不会在日志中显示。

希望这能回答你的问题。 一切顺利:)

答案 3 :(得分:0)

之前设置isNeeded = true
if (isNeeded)
        {
            // buttonImportant is not clickable
            buttonImportant.setOnClickListener(new View.OnClickListener() {

然后再次测试。 祝你好运!

答案 4 :(得分:0)

发布我的ans时出错,所以我截了它的截图。请查看它以获得答案

enter image description here