2016-08-06 56 views
0

我不想重複這個代碼的所有時間:如何不重複代碼? Xamarin - 安卓

Button btnClicks = FindViewById<Button>(Resource.Id.MyButton); 
Button btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 

我怎樣才能改善這種代碼看起來更乾淨? 這段代碼的垃圾郵件真的會影響應用程序的性能嗎?

protected override void OnResume() 
    {   
     base.OnResume(); 
     Button btnClicks = FindViewById<Button>(Resource.Id.MyButton); 
     Button btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 

     btnWarning.Click += btnWarn; 
    } 

    protected override void OnPause() 
    { 
     base.OnPause(); 
     Button btnClicks = FindViewById<Button>(Resource.Id.MyButton); 
     Button btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 

     btnWarning.Click -= btnWarn; 

    } 

    private void btnWarn(object sender, EventArgs e) 
    { 
     Button btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 
     btnWarning.Text = string.Format("Warning Test"); 
    } 
+2

使用類的扣件和初始化在OnCreate然後經過再利用呢? – Kariem

+0

使用成員變量/字段? –

回答

1

使按鈕類變量,然後在OnCreate

Button btnClicks; 
Button btnWarning; 

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 
    btnClicks = FindViewById<Button>(Resource.Id.MyButton); 
    btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 
    btnWarning.Click += btnWarn; 
} 
現在

private void btnWarn(object sender, EventArgs e) 
{ 
    btnWarning.Text = string.Format("Warning Test"); 
} 
+0

是啊,我知道,但如果我試試這個: 保護覆蓋無效OnResume() { base.OnResume(); btnWarning.Click + = btnWarn; } 我收到一條錯誤消息:名稱'btnWarning'在當前上下文中不存在 – Malucs

+0

只需在oncreate中做足夠的事情,您不必在onresume和onpause中執行它。只要點擊按鈕 –

+0

哦,尼斯,你編輯你的答案後,它只是開始工作,謝謝! – Malucs

1

你真的需要刪除的停頓Click處理?

這通常足以初始化處理程序OnCreate就是這樣。

如果您確實需要不止一次訪問視圖,然後繼續在Activity類自身觀點的引用:

class MyActivity : Activity 
{ 
    Button myButton; 

    protected override void OnCreate(Bundle bundle) 
    { 
    base.OnCreate(bundle); 
    var myButton = FindViewById<Button>(Resource.Id.MyButton); 
    } 

    protected override void OnPause() 
    { 
    // do something with myButton 
    } 
} 
+0

我不知道我是否真的需要這樣做。我做這個OutOfMemoryException的原因。 – Malucs

+0

內存問題可能不相關(至少根據您發佈的代碼) – daramasala

0

每當你訂閱事件,你應該退訂以及釋放任何附加到活動的內存資源。如果您不退訂,最終可能會獲得OutOfMemoryException。其實,你在做正確的那部分,但其他人所說,你需要使用OnCreate找到意見只是一次:

Button btnClicks; 
Button btnWarning; 

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 

    btnClicks = FindViewById<Button>(Resource.Id.MyButton); 
    btnWarning = FindViewById<Button>(Resource.Id.ButtonWarning); 
} 

protected override void OnResume() 
{   
    base.OnResume(); 

    btnWarning.Click += btnWarn; 
} 

protected override void OnPause() 
{ 
    base.OnPause(); 

    btnWarning.Click -= btnWarn; 
}