0

Ich habe ein Problem mit meiner App. Zuerst machte ich zwei Tabs unter Verwendung von Fragmenten, die eine Aktivität aufblähen. Die implementierten Registerkarten funktionieren einwandfrei. Zweitens habe ich das XAML Recht angezeigt.Wie kann ich Ascyn in OncreateView ausführen?

Allerdings muss ich nun etwas asynchron in OnCreateView im Fragment ausführen. Wie kann ich das schaffen, ohne Fehler zu bekommen?

Jede Hilfe wird sehr geschätzt! Dank

Hier ist mein Fragment:

public class FragmentSettings : SupportFragment 
{ 
    private Button mBtnOk; 

    public FragmentSettings(Context context) 
    { 
     mContext = context; 
    } 

    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     //Inflate the fragment XML 
     View view = inflater.Inflate(Resource.Layout.FragmentSettings, container, false); 

     //Grab the butten from the inflated fragment 
     mBtnOk = view.FindViewById<Button>(Resource.Id.mBtnOk); 
     mBtnOk.Click += (object sender, EventArgs e) => 
     { 
      //DO stuff 
     }; 
     //===================================== 
     //Want to do something async stuff here 
     //===================================== 

     return view; 
    } 
} 
+0

Gibt es einen Grund, warum es async sein sollte und was Sie in der asynchronen Methode tun möchten? –

+0

Ich möchte etwas aus meiner Datenbank anzeigen, die wiederum separat vom Rest ausgeführt werden muss –

+0

muss es kontinuierlich oder nur einmal ausgeführt werden? –

Antwort

0

Ich würde nur einen Backgroundworker verwenden, wenn Sie Sachen im Hintergrund getan brauchen:

BackgroundWorker bworker; 

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    //Inflate the fragment XML 
    View view = inflater.Inflate(Resource.Layout.FragmentSettings, container, false); 

    //Grab the butten from the inflated fragment 
    mBtnOk = view.FindViewById<Button>(Resource.Id.mBtnOk); 
    mBtnOk.Click += (object sender, EventArgs e) => 
    { 
     //DO stuff 
    }; 

    //Start background task 
    bworker = new BackgroundWorker(); 
    bworker.DoWork += Bworker_DoWork; 
    bworker.RunWorkerCompleted += Bworker_RunWorkerCompleted; 
    bworker.RunWorkerAsync(); 

    return view; 
} 


private void Bworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    //Do stuff when the operation is completed 
    bworker.RunWorkerAsync(); 
} 

private void Bworker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    //Do the work in the background 
} 

EDIT: es kontinuierlich laufen zu lassen, können Sie die Background agin in der Bworker_RunWorkerCompleted Methode starten. (siehe Methode)

Ich denke nur nicht, dass es ein guter Weg ist, einen kontinuierlichen Thread zu implementieren, da ich das Gefühl habe, dass es eine Menge Speicher aufnehmen wird. Sie können es versuchen.

1

Zum Beispiel können Sie einfach

AsyncTask laufen

Nur etwas so sagen es:

new AsyncTask<Void, Void, Void>() { 
    @Override 
    protected Void doInBackground(Void... voids) { 
     //do your work here 
     return null; 
    } 
}.execute(); 
+1

Ich würde persönlich die asynchrone Aufgabe von der OnCreate() -Methode trennen – MwBakker

+0

Sie haben Recht. Der beste Weg ist, Code zu implementieren, der nur für Set-up-Eigenschaften in OnCreateView verantwortlich ist –

1

Dies hat den Trick für mich, danke für alle Antworten!

public override async void OnActivityCreated(Bundle savedInstanceState) 
    { 
     base.OnActivityCreated(savedInstanceState); 


     await LoadData(); 
    } 
    private async Task LoadData() 
    { 
    //My async method 
    } 
+0

Awesome Kumpel! Habe den Zyklus komplett vergessen! Vielen Dank! – Xonshiz

Verwandte Themen