0

Ich habe ein Fragment, das, wenn eine Taste gedrückt wird, ein Fortschrittsdialog zeigen und eine Methode ausführen sollte, die eine AsyncTask enthält, aber wenn ich die Schaltfläche drücke, erscheint der Fortschrittsdialog nicht auf dem Bildschirm, sondern der Async-Task wird ausgeführt. Dies ist der Code des FragmentsFortschrittsanzeige erscheint nicht

public class ParcheggiaFragment extends Fragment { 

private Button button; 
ProgressDialog progressDialog1; 
SharedPreferences prefs; 
HttpGetNoleggio httpGetNoleggio; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    final View layout = inflater.inflate(R.layout.fragment_parcheggia, container, false); 

    button = (Button) layout.findViewById(R.id.button); 
    prefs = this.getActivity().getSharedPreferences(Keys.SHARED_PREFERENCES, Context.MODE_PRIVATE); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      progressDialog1.show(); 

      int a = checkNoleggioCompletato(); 

      FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.frame_principale, new ResultFragment()); 
      fragmentTransaction.commit(); 

     } 
    }); 

    return layout; 
} 

private int checkNoleggioCompletato() { 

    final int id = prefs.getInt(Keys.ID_UTENTE, -1); 

    Integer[] noleggio; 
    int idNoleggio = -1; 
    try { 
     String str = "here i put the url that i have to use" + id; 
     URL url = new URL(str); 

     noleggio = httpGetNoleggio.execute(url).get(); 
     idNoleggio = noleggio[0]; 
     int idBici = noleggio[1]; 
     int noleggioResult = idNoleggio; 
    } catch (MalformedURLException | ExecutionException | InterruptedException e) { 
     e.printStackTrace(); 
    } 
    return idNoleggio; 
} 

@Override 
public void onStart() { 

    progressDialog1 = new ProgressDialog(this.getActivity()); 
    progressDialog1.setIndeterminate(true); 

    super.onStart(); 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    httpGetNoleggio = new HttpGetNoleggio(this.getActivity()); 

} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

}

Der Code scheint richtig, und ich kann nicht verstehen, warum die ProgressDialog nicht angezeigt. ist eine weitere Klasse, die AsyncTask erweitert und die doInBackground-Methode implementiert

+1

Wo entfernen Sie den Dialog. Es kann sein, dass die Aufgabe so schnell abgeschlossen wird, dass der Dialog nicht einmal mehr angezeigt wird. – Shaishav

+0

@Shaishav die Aufgabe dauert 7 Sekunden, um abzuschließen. Der ProgressDialog erscheint nicht in diesem Fragment, sondern erscheint im nächsten Fragment 'ResultFragment' –

+0

Ich verstehe nicht, Sie sagten *" der Fortschritt Dialog erscheint nicht auf dem Bildschirm "*. Starten Sie das 'ResultFragment' nicht nur beim Klicken auf die Schaltfläche? – Shaishav

Antwort

0

Gemäß Ihrem Code zeigen Sie den Fortschrittsbalken in ParcheggiaFragment an und ersetzen dieses Fragment dann durch ResultFragment. Da ResultFragment ParcheggiaFragment ersetzt hat, wird die Fortschrittsleiste nicht angezeigt. Kommentieren Sie einfach folgenden Code:

FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.frame_principale, new ResultFragment()); 
fragmentTransaction.commit(); 

Dann wird Fortschrittsbalken sichtbar sein.

+0

Aber er initialisiert den Fortschrittsdialog mit Aktivitätskontext so, sollte nicht ' t es erscheint (und verhält sich legitim), egal, welches "Fragment" angezeigt wird? – Shaishav

+0

ProgressDialog erscheint, wenn das Fragment geändert wird. In diesem Fall erscheint es, wenn ResultFragment auf dem Bildschirm erscheint –

+0

Wie der Code Fortschrittsbalken sichtbar ist, aber darüber neue Ergebnisfragment erscheinen wegen neuer Transaktion. – Rajendra