2017-07-05 12 views
0

Ich füge eine Fortschrittsanzeige hinzu, wenn der Benutzer eine Suchabfrage ausführt, und es wird nicht auf dem Bildschirm angezeigt. Hier sind die Schnipsel:Fortschrittsbalken wird nicht im Bildschirm angezeigt, aber im Debugger angezeigt

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button searchButton = (Button) findViewById(R.id.searchButton); 
     setContentView(R.layout.activity_main); //main layout, which has a child layout called resultsLayout 
     searchButton.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      EditText searchString = (EditText) findViewById(R.id.searchString); 
      search(searchString.getText().toString()); 
     } 
    }); 

    protected void search(String searchString){ 
     LinearLayout resultLayout = ((LinearLayout) findViewById(R.id.resultsLayout)); 
     resultLayout.addView(DisplayResults.getLoadBar(getApplicationContext())); 
     //do search 
     resultLayout.removeAllViews(); 
    } 

    public static ProgressBar getLoadBar(Context context){ 
     ProgressBar loadBar = new ProgressBar(context); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     loadBar.setLayoutParams(params); 
     loadBar.setVisibility(View.VISIBLE); 
     return loadBar; 
    } 

Ich weiß, einige ist es vielleicht nicht nötig sein, wie die setVisibility rechts beim Erstellen, aber ich habe einige Dinge ausprobiert und es nicht funktioniert. Vielleicht gab es nicht genug Zeit, um die Bar zu zeigen? (Es dauert etwa 1,5 Sekunden für die Suche)

Ich habe auch die Anwendung debuggt, und es zeigt die ProgressBar als Kind des Layouts, aber ich kann es immer noch nicht sehen Sie es auf dem Bildschirm.

enter image description here

Antwort

0
ProgressDialog progressDialog; //Create a prog dialog object 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Button searchButton = (Button) findViewById(R.id.searchButton); 
    progressDialog=new ProgressDialog(this); //init it 
    searchButton.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     progressDialog.show(); //show it when needed 
     EditText searchString = (EditText) findViewById(R.id.searchString); 
     search(searchString.getText().toString()); 
    } 
}); 

protected void search(String searchString){ 
    progressDialog.dismiss();//dismiss it when the search is complete 
    LinearLayout resultLayout = ((LinearLayout) findViewById(R.id.resultsLayout)); 
    resultLayout.addView(DisplayResults.getLoadBar(getApplicationContext())); 
    //do search 
    resultLayout.removeAllViews(); 
} 

Sie könnten diese Aufgabe Implementierung ProgressDialog versuchen. https://developer.android.com/reference/android/app/ProgressDialog.html

+0

Es heißt, die Funktion ist veraltet, und ich konnte immer noch nicht tun, was ich ursprünglich wollte. – Michel

+0

Gibt an, welche Funktion veraltet ist? Kannst du ein Bild davon posten? –

+0

[ProgressDialog veraltet] (https://ibb.co/fuHiza) – Michel

0

setContentView(resultLayout); am Ende search() Methode

+0

Das sollte nicht sein. Ich habe ein paar Dinge aus dem onCreate rausgeholt, ich werde es hinzufügen, um es klar zu machen. – Michel

+0

fügen Sie alle von ihnen pragmatisch hinzu, wenn Sie können –

0

Ich erkennen hinzufügen, dass Android für jede Anweisung in dem Code nicht auf den Bildschirm nicht aktualisiert, es anscheinend so nur, dass, wenn eine Funktion endet. Abgesehen davon musste ich meine Suche in einem separaten Thread durchführen, damit das Laden zwischen dem Zeitpunkt, an dem der Suchvorgang gestartet wurde und vor dem Ende des Ladevorgangs, auftrat.

Verwandte Themen