私のアプリケーションには、新しいリマインダーがあるかどうかを数秒ごとにチェックするバックグラウンド AsyncTask があり、新しいリマインダーがある場合は、リマインダー メッセージを表示する dialogeFragment を開始する必要があります。問題は、dialogeFregment はアクティビティからのみ使用できることを読んだことです。これを実装する方法についてのアイデアを共有できますか?
これが現在のコードです。
public class checkReminderTask extends AsyncTask<FragmentManager, String, Void> {
Context context;
private MainActivity activity;
FragmentManager fm;
checkReminderTask(Context app_context){
context=app_context;
objPlayer=MediaPlayer.create(context, R.raw.its_time_time_tim);
reminderTable = new ParseObject("ReminderTable");
settingsTable = new ParseObject("SettingsTable");
androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
ParseQuery query = new ParseQuery("SettingsTable");
query.whereEqualTo("userID", androidId);
query.getFirstInBackground(new GetCallback() {
public void done(ParseObject object, ParseException e) {
if (object == null) {
//TODO something, throw exception
} else {
myNumber=object.getString("userNumber");
}
}
});
}
@Override
protected Void doInBackground(FragmentManager... arg) {
//infinitely loop, and move the ball accordingly
fm=arg[0];
while (1 < 2)
{
//downloading the reminder...
try
{
publishProgress(currentDateandTime,reminderExeTime,reciverNumber,message);
Thread.sleep(1000);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
if(values[0].equals(values[1])){
MessageReceivedReminder dialog = new MessageReceivedReminder();
dialog.setMessageArguments(context,values[2],values[3]);
dialog.show(fm, "MyDialog");
objPlayer.start();
}
else
{
Log.i("thread", "compareFailed");
}
}
アクティビティからのコード (FragmentManager を直接送信しようとしています):
FragmentManager fm = getFragmentManager();
ringThread.execute(fm);
現在、ヌル ポインターが原因で実行時エラーが発生しています。
ありがとう!!