首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WeakReference on buttonClick

WeakReference on buttonClick
EN

Stack Overflow用户
提问于 2014-05-17 11:01:58
回答 1查看 302关注 0票数 0

我对WeakReference有个问题。我发现这个代码出错了..。你能帮帮我吗?我不明白如何使用WeakReference与按钮单击事件。

代码语言:javascript
复制
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);
         }           
    }

错误:

代码语言:javascript
复制
contextReference cannot be resolved or is not a field

这里:

代码语言:javascript
复制
     if(this.contextReference.get() != null) {
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-17 11:15:17

你有两个问题。

首先,您需要实现onClick方法的View.OnClickListener

你的第二个问题是“这个”在内部匿名类中,新的View.OnClickListener()引用的是匿名类,而不是MainActivity。这是一个常见的错误。

使用

代码语言:javascript
复制
MainActivity.this.contextReference

相反,或者只是

代码语言:javascript
复制
contextReference

因为这是您代码中的一个完全限定的名称。

实际上,在上面的行中,您已经这样做了,所以只需使用上下文,如下所示:

代码语言:javascript
复制
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);
            }
         }           
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23710505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档