2016-07-13 1 views
1

I ont une activité avec un BrodcastReceiver en elle, comme indiqué dans le code suivant:erreur avec findViewById utilisé dans un récepteur de diffusion générale, Xamarin.Android

public class MyActivity : Activity 
    { 
     protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     // Create your application here 
     SetContentView(Resource.Layout.activity_myActivity); 

     int method = Intent.GetIntExtra(KEY_MYACTIVITY_METHOD, METHOD_MYACTIVITY); 

     mAlgo= new algo(this);    
     intent = new Intent(this, typeof(BroadcastService)); //***** 
    } 

    [BroadcastReceiver(Enabled = true)] 
    [IntentFilter(new[] { Android.Content.Intent.ActionBootCompleted })] 
    private class broadcastReceiver : BroadcastReceiver 
    { 
     public override void OnReceive(Context context, Intent intent) 
     { 
      updateUI(intent); 
     } 
     private void updateUI(Intent intent) 
     { 
      float mx = mAlgo.getmX(); 

      TextView startx =FindViewById<TextView>(Resource.Id.startx); //ERROR 


     } 

    } 
} 

Je l'erreur avec laquelle findViewById dire qu'une référence d'objet est requis pour la propriété, la méthode ou le champ non statique Activity.FindViewById (int) '. Pouvez-vous voir ce qui ne va pas? merci

Répondre

2

Vous ne pouvez pas appeler FindViewById à partir d'une classe imbriquée. Vous pouvez:

1) Tenir une référence à l'objet d'activité à l'intérieur de la classe broadcastReceiver imbriquée:

public class MyActivity : Activity { 

    ... 

    private class broadCastReceiver : BroadcastReceiver { 
     private MyActivity act; 

     public broadCastReceiver (MyActivity act) { 
      this.act = act; 
     } 

     private void updateUI (Intent intent) { 
      TextView startx = act.FindViewById<TextView> (Resource.Id.startx); 
     } 
    } 
} 

2) Ou tenir une référence à la TextView dans l'activité et le transmettre au récepteur de diffusion de la même comme dans le 1er exemple.