2016-07-13 7 views
1

I eine Aktivität mit einem BrodcastReceiver darin haben, wie in diesem Code dargestellt:Fehler bei findViewById verwendet in einem Empfänger mit Boradcast 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 


     } 

    } 
} 

Ich habe den Fehler mit findViewById, die sagen, dass ein Objekt Referenz erforderlich für die Eigenschaft, Methode oder das nicht statische Feld Activity.FindViewById (int) '. Kannst du sehen, was schief läuft? Danke

Antwort

2

Sie können FindViewById nicht von einer geschachtelten Klasse aufrufen. Halten

1) Objekt einen Verweis auf die Aktivität innerhalb des verschachtelten broadcastReceiver Klasse: Sie könnten

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) Oder halten einen Verweis auf die TextView der Tätigkeit und übergeben es an den Rundfunkempfänger ähnlich wie im 1. Beispiel.

Verwandte Themen