2017-11-15 25 views
0

私のアプリに問題があります。まず、フラグメントを使用して2つのタブを作成し、アクティビティを展開しました。実装されたタブは正常に動作しています。第二に私はXAMLを表示しています。OncreateViewでAsyncを実行するにはどうすればよいですか?

ただし、フラグメントのOnCreateViewの で非同期に何かを実行する必要があります。どのように私はエラーを得ることなくこれを管理することができますか?

すべてのヘルプは大歓迎です!おかげ

ここでは私のフラグメントである:例えば

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

なぜ非同期にする必要があり、非同期メソッドで何をしたいのですか? –

+0

私のデータベースから何かを表示したいのですが、それは残りの部分と別々に実行する必要があります。 –

+0

連続して実行する必要がありますか? –

答えて

0

は、私はちょうど、BackgroundWorkerのを使用することになり、それが継続的に実行するようにするには、Bworker_RunWorkerCompletedメソッドでのBackgroundWorker aginを開始することができます。 (メソッドを参照してください)

私はそれがメモリの多くを占めるだろうという気持ちを持っているので、それは良い方法は、連続的なスレッドを実装すると思います。あなたは思うことができます。

1

あなたは、単にちょうどこのような何かそこに置か

AsyncTask

を実行することができます。

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

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:あなたがバックグラウンドで行われるものが必要な場合は

+1

私は個人的には、OnCreate()メソッドから非同期タスクを分離するでしょう – MwBakker

+0

あなたは正しいです。最善の方法は、OnCreateViewのビュープロパティを設定するためだけに責任があるコードを実装することです。 –

1

これは私のためのトリックでした、すべての答えのおかげで!

+0

恐ろしい男!完全にサイクルを忘れてしまった!ありがとう! – Xonshiz

関連する問題