我有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) {
答案 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);
}
}
}