2013-01-13 59 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

謝謝..它節省我的時間:) –