2013-01-13 39 views
0

我有一个称为检查的按钮,我希望它是不可见和可见的,因为如果它可见,我点击它将成为看不见和诗歌!错误更改按钮的可见性onClick

但我的代码不起作用!有任何想法吗 ?

Button Check ; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.settings); 

     Check = (Button)findViewById(R.id.checkButton); 

      Check.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View View) { 



       if (View.getVisibility() == android.view.View.VISIBLE) 
         View.setVisibility(android.view.View.INVISIBLE); 
         else if (View.getVisibility() == android.view.View.INVISIBLE) 
          View.setVisibility(android.view.View.VISIBLE); 

      } 
     }); 

在我的活动它在一开始可见,当我点击它,它成为无形的,但是当我再次单击它保持无形!

+0

您可以添加错误日志吗?或者指定哪些不起作用? –

+0

已编辑请检查 –

回答

1

试试这个:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="abcd" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:onClick="abc" 
     android:text="Button" /> 
</LinearLayout> 



public void abc(View v) { 
    v.setVisibility(View.INVISIBLE); 
} 

public void abcd(View v) { 
    v.findViewById(R.id.button1).setVisibility(View.VISIBLE); 
} 

可见项不会收到击事件。因此,只有通过接收其他视图来取代不可见视图,您才能获得无形点击的唯一方法。上面的解决方案将按钮封装在一个布局中,所以当按钮不可见时,单击按钮将传递给布局,该布局处理事件并进行相应处理。如果您对这种布局的使用率很高,则还可以使用上述机制创建自定义按钮。

+0

多么好的解决方案!非常感谢 –

3

你的代码改成这样,

Check.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (v.isShown()) 
         v.setVisibility(View.INVISIBLE); 
       else 
         v.setVisibility(View.VISIBLE); 

      } 

但我认为问题是,当按钮变为无形的,你没有得到它的任何点击事件。首先确保当按钮不可见时onClick方法得到调用。

隐形按钮不会发送任何交互事件。因此,不要将按钮的可见性设置为不可见,您可以设置透明或空白背景或类似的东西。

但我个人认为,你应该改变你的用例,因为为什么会点击不可见的按钮。

+0

如何在点击按钮不可见时点击按钮? –

+0

你不知道。一个看不见的按钮不在那里。操作系统为它保留空间,但不能与其交互。 –

+0

谢谢..它节省我的时间:) –