2014-05-17 54 views
0

我有一個WeakReference的問題。我得到這個代碼的錯誤... 你能幫助我嗎? 我不明白如何使用WeakReference與按鈕單擊事件。WeakReference on buttonClick

public class MainActivity extends FragmentActivity { 

private final WeakReference<Context> contextReference; 

public MainActivity(Context context) { 
    this.contextReference = new WeakReference<Context>(context); 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

btnArrivi.setOnClickListener(new View.OnClickListener() { 
     Context context = this.contextReference.get(); 
    if(this.contextReference.get() != null) { 

     Intent intent = new Intent(context, Arrivi.class); 
     intent.putExtra("A_Compagnia", A_Compagnia); 
     intent.putExtra("A_CodiceVolo", A_CodiceVolo); 
     intent.putExtra("A_Citta", A_Citta); 
     intent.putExtra("A_OraPrevista", A_OraPrevista); 
     intent.putExtra("A_OraStimata", A_OraStimata);     
     intent.putExtra("thread",thread); 

     context.startActivity(intent); 
     }   
    } 

錯誤:

contextReference cannot be resolved or is not a field 

這裏:

 if(this.contextReference.get() != null) { 
+1

你忘了錯誤代碼? –

+1

張貼您的日誌貓 –

+0

我已編輯1st post – roxdragon

回答

0

你有兩個問題。

首先,你需要實現View.OnClickListener

你的第二個問題的onclick梅託德是,「這一點。」在內部匿名類中,新的View.OnClickListener()引用了匿名類,而不是MainActivity。這是一個常見的錯誤。

使用

MainActivity.this.contextReference 

代替,或者只是

contextReference 

,因爲這是在你的代碼完全合格的名稱。

其實,上面的線,你已經做到這一點,因此就使用情境,而不是像這樣:

public class MainActivity extends FragmentActivity { 

private final WeakReference<Context> contextReference; 

public MainActivity(Context context) { 
    this.contextReference = new WeakReference<Context>(context); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnArrivi.setOnClickListener(new View.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
      Context context = contextReference.get(); 
      if(context != null) { 

       Intent intent = new Intent(context, Arrivi.class); 
       intent.putExtra("A_Compagnia", A_Compagnia); 
       intent.putExtra("A_CodiceVolo", A_CodiceVolo); 
       intent.putExtra("A_Citta", A_Citta); 
       intent.putExtra("A_OraPrevista", A_OraPrevista); 
       intent.putExtra("A_OraStimata", A_OraStimata);     
       intent.putExtra("thread",thread); 

       context.startActivity(intent); 
      } 
     }   
    }