WeakReference on按钮单击

时间:2014-05-17 11:01:59

标签: android

我有WeakReference的问题。我的代码出错... 你能帮我吗? 我不明白WeakReference如何使用按钮点击事件。

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 个答案:

答案 0 :(得分:0)

你有两个问题。

首先,您需要实现View.OnClickListener

的onClick方法

你的第二个问题是&#34;这个。&#34;在内部匿名类中,新的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);
            }
         }           
    }