2012-04-16 164 views
1

在我的應用程序im試圖切換兩個透明按鈕(我知道這是相當hackish)在RealViewSwitcher內的可見性。我正在根據RealViewSwitcher的當前頁面更改可見性。我可以讓第一個按鈕工作,但第二個按鈕從未變爲活動狀態。這裏是我的代碼:切換多個按鈕的可見性

///////////////

if(realViewSwitcher.getCurrentScreen() == 0) 
    { 

     final Button btn1 = (Button)findViewById(R.id.btn1); 

     btn1.setOnClickListener(new View.OnClickListener() 
     {  
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(); 
       intent.setAction(Intent.ACTION_VIEW); 
       intent.addCategory(Intent.CATEGORY_BROWSABLE); 
       intent.setData(Uri.parse("http://www.test.com")); 
       startActivity(intent); 

       btn1.setVisibility(View.GONE); 

      } 
     }); 
    } 

    else if(realViewSwitcher.getCurrentScreen() == 2) 
    { 
     final Button btn2 = (Button)findViewById(R.id.btn2); 
     btn2.setVisibility(0); 

     btn2.setOnClickListener(new View.OnClickListener() 
     {  
      @Override 
      public void onClick(View v) 
      { 

       Intent intent = new Intent(Intent.ACTION_SEND); 
       String[] tos = { "[email protected]" }; 
       intent.putExtra(Intent.EXTRA_EMAIL, tos); 
       intent.putExtra(Intent.EXTRA_TEXT, "body"); 
       intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
       intent.setType("message/rfc882"); 
       Intent.createChooser(intent, "Choose Email Client"); 

      } 
     }); 
    } 

    /////////////// 
    //end 
    ///////////////////// 

這裏是XML

<Button 
     android:id="@+id/btn1" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:background="@null"/> 

    <Button 
     android:id="@+id/btn2" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:background="@null" 
     android:visibility="gone"/> 
+2

不要將呼叫之類的硬編碼setVisibility int類型。總是使用View.GONE等。 – 2012-04-16 23:12:05

+0

if else if(realViewSwitcher.getCurrentScreen()== 2)else else(realViewSwitcher.getCurrentScreen()== 1)(change 2 to 1)?如果你可以發佈你的完整的佈局XML,這將是有益的。 – 2012-04-16 23:14:50

+0

它必須等於2,因此指的是realViewSwitcher的第三頁。只有第一頁和第三頁有超鏈接活動。第二和第四頁只是文字。我的xml會立刻起來,謝謝。 – Jamesar 2012-04-16 23:20:25

回答

1

你的代碼只是需要一點點清潔。

  1. 首先,你的按鈕應該聲明爲字段。就像這樣,它們只是if語句的實例變量。
  2. 出於同樣的原因,應該在if語句之外聲明點擊偵聽器。在onCreate()或適合你喜歡的地方聲明它們。
  3. 設置getCurrentWindow()的開關。與if... else if... else if...相比,使用起來更容易。

我可以建議:

final Button btn1 = (Button) findViewById(R.id.btn1); 
final Button btn2 = (Button)findViewById(R.id.btn2); 

//Inside onCreate() or similar 
btn1.setOnClickListener(new View.OnClickListener() {  
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(); 
     intent.setAction(Intent.ACTION_VIEW); 
     intent.addCategory(Intent.CATEGORY_BROWSABLE); 
     intent.setData(Uri.parse("http://www.test.com")); 

     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Required to start a new activity 
     startActivity(intent); 

     btn1.setVisibility(View.GONE); 

    } 
}); 

//In the same place 
btn2.setOnClickListener(new View.OnClickListener() {  
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     String[] tos = { "[email protected]" }; 
     intent.putExtra(Intent.EXTRA_EMAIL, tos); 
     intent.putExtra(Intent.EXTRA_TEXT, "body"); 
     intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
     intent.setType("message/rfc882"); 
     Intent.createChooser(intent, "Choose Email"); 
     btn2.setVisibility(View.VISIBLE); 
    } 
}); 

//Later, in your other functional code 
switch (realViewSwitcher.getCurrentScreen()) { 
    case 0: 
     //do your stuff 
     break; 
    case 2: 
     //other stuff 
     break; 
    default: //If you need it 
     throw new Exception("Oops..."); 
} 
+0

這真棒!感謝您的幫助,我會給它一個機會! – Jamesar 2012-04-16 23:34:45