私は互換性ライブラリv4 +を使用しています。 他のthreadsとdev guideに続いて、それを作成するアクティビティから進捗ダイアログを呼び出すフラグメントを作成しようとしています。 このアプローチでは、AsyncTaskの事前実行で表示されたDialogFragmentを使用して、実行後に却下(削除)します。 結果として、私は任意のダイアログを取得しません....まあ、ダイアログは、thread.sleepの最後にほんの数秒間しか表示されません。android:progress AsyncTaskの先頭にDialogFragmentが表示されない
誰かが私が間違っている場所を教えてもらえますか?
私はここに私のフラグメントを持っている:
public class GroupsDetailsFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_groups_details, container, false);
return v;
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
loadPage();
}
public void loadPage() {
Log.i(TAG, "loadPage");
new LoadPageTask(getBaseActivity()).execute();
}
public void executeLoadPagePreExecution() {Log.i(TAG, "executeLoadPagePreExecution"); }
public void executeLoadPageInBackground() {Log.i(TAG, "executeLoadPageInBackground"); }
public void executeLoadPagePostExecution() {try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}Log.i(TAG, "executeRefreshPostExecution"); }
protected class LoadPageTask extends AsyncTask<Void, Void, String> {
private Context context;
public LoadPageTask(Context context) {
super();
this.context = context;
}
@Override
protected void onPreExecute() {
// before the network request begins, show a progress indicator
getBaseActivity().showLoadingProgressDialog(context);
executeLoadPagePreExecution();
}
@Override
protected String doInBackground(Void... params) {
String result = executeLoadPage();
Log.i(TAG, "error message result: " + result);
return result;
}
// Returns null if Everything is OK. Error Message if any problem.
private String executeLoadPage() {
try {
executeLoadPageInBackground();
return null;
} catch (Exception e){
Log.w(TAG, e.getMessage(), e);
return(e.getMessage());
}
}
@Override
protected void onPostExecute(String message) {
executeLoadPagePostExecution();
getBaseActivity().dismissProgressDialog();
if (message!=null){
Utility.showMessageAlertDialog(message, context);
}
}
}
}
とフラグメントdispays FragmentActivityの内部クラスですProgressDialogFragment:
public static class ProgressDialogFragment extends DialogFragment {
public static ProgressDialogFragment newInstance(String title, String message) {
ProgressDialogFragment fragment = new ProgressDialogFragment();
Bundle args = new Bundle();
args.putString("title", title);
args.putString("message", message);
fragment.setArguments(args);
return fragment;
}
@Override
public ProgressDialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("title");
String message = getArguments().getString("message");
ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setTitle(title);
progressDialog.setMessage(message);
progressDialog.show();
return progressDialog;
}
}
public void showProgressDialog(String title, String message) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment prev = fragmentManager.findFragmentByTag("progress dialog");
if(prev!=null) {
fragmentTransaction.remove(prev);
}
fragmentTransaction.addToBackStack(null);
DialogFragment newFragment = ProgressDialogFragment.newInstance(title, message);
newFragment.show(fragmentManager, "progress dialog");
//fragmentTransaction.commit();
}
public void removeProgressDialog() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment prev = fragmentManager.findFragmentByTag("progress dialog");
if(prev!=null) {
fragmentTransaction.remove(prev);
}
fragmentTransaction.commit();
}
setprogresstateメソッドはどうですか?また、basefragmentクラスの外でダイアログ・フラグメントをどのように使用しますか? getSupportFragmentManagerを渡すことはできますか? – Maxrunner