ProgressDialog und SnackBar in MainActivity

SM-T110 UND GT-I9300

SM-T110 UND GT-I9300

Fortgeschrittenes Mitglied
17
Hallo, ich habe eine simple App programmiert, die eine SnackBar zeigt mit Text, wenn man auf den jeweiligen Button der Buttons drückt. Jetzt möchte ich einen neuen Button und einen ProgressDialog hinzufügen, aber ich weis nicht wie. Könnte mir jemad ggf. Helfen?

Meine MainActivity.java ist wiefolgt

Code:
package com.example.example;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.text.*;

public class MainActivity extends AppCompatActivity {

    private CoordinatorLayout coordinatorLayout;

    // Button variables
    private Button buttonSimpleSnackbar;
    private Button buttonCustomSnackbar;
    private Button buttonMultiColorSnackbar;
    private Button buttonActionCallbackSnackbar;

    [USER=3517]@override[/USER]
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        initViews();
        initListeners();

    }

    /**
     * method to initialize views objects
     */
    private void initViews() {
        coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout);
        buttonSimpleSnackbar = (Button) findViewById(R.id.buttonSimpleSnackbar);
        buttonCustomSnackbar = (Button) findViewById(R.id.buttonCustomSnackbar);
        buttonMultiColorSnackbar = (Button) findViewById(R.id.buttonMultiColorSnackbar);
        buttonActionCallbackSnackbar = (Button) findViewById(R.id.buttonActionCallbackSnackbar);

    }

    /**
     * method to initialize listeners
     */
    private void initListeners() {

        buttonSimpleSnackbar.setOnClickListener(new View.OnClickListener() {
            [USER=3517]@override[/USER]
            public void onClick(View v) {
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "Android 6.0.1 MM!", Snackbar.LENGTH_LONG);

                snackbar.show();
            }
        });

        buttonCustomSnackbar.setOnClickListener(new View.OnClickListener() {
            [USER=3517]@override[/USER]
            public void onClick(View v) {
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "EIN FEHLER IST AUFGETRETEN!", Snackbar.LENGTH_LONG)
                        .setAction("NEU LADEN", new View.OnClickListener() {
                            [USER=3517]@override[/USER]
                            public void onClick(View view) {

                            }
                        });

                // Message text color
                snackbar.setActionTextColor(Color.WHITE);

                // Action button text color
                View snackBarView = snackbar.getView();
                TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text);
                textView.setTextColor(Color.RED);

                snackbar.show();
            }
        });

        buttonMultiColorSnackbar.setOnClickListener(new View.OnClickListener() {
            [USER=3517]@override[/USER]
            public void onClick(View v) {

                // Creating MultiColor Text
                SpannableStringBuilder snackbarText = new SpannableStringBuilder();
                snackbarText.append("DIES IST ");
                int boldStart = snackbarText.length();
                snackbarText.append("EINE SnackBar");
                snackbarText.setSpan(new ForegroundColorSpan(Color.CYAN), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                snackbarText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                snackbarText.append(".");

                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, snackbarText, Snackbar.LENGTH_LONG);

                snackbar.show();


            }
        });

        buttonActionCallbackSnackbar.setOnClickListener(new View.OnClickListener() {
            [USER=3517]@override[/USER]
            public void onClick(View v) {
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "Email wurde gelöscht", Snackbar.LENGTH_LONG)
                        .setAction("Rückgängig", new View.OnClickListener() {
                            [USER=3517]@override[/USER]
                            public void onClick(View view) {
                                Snackbar snackbarUndo = Snackbar.make(coordinatorLayout, "Email wurde wiederhergestellt!", Snackbar.LENGTH_SHORT);
                                snackbarUndo.show();
                            }
                        });

                snackbar.show();
            }
        });
    }


}




Ich bin für jede Hilfe dankbar
 
Zuletzt bearbeitet von einem Moderator:
Hallo SMT,

Zuerst musst du dir die Elemente in Deinem Layout definieren - Das hast du ja bereits schon mit deinen Buttons gemacht.

Oder wo hapert es bei Dir ?
 
swa00 schrieb:
Oder wo hapert es bei Dir ?
also ich ich habe in der main_activity.xml einen coordinatorLayout und habe dem einen Button hinzugefügt der eine SnackBar macht( Diesen habe ich mittlerweile so definiert, dass sich nach jedem OnClick die Farbe der Acrionbar ändert) nun habe ich in dem LinearLayout einen neuen button, welche Noch nichts kann. dieser Button soll einen ProgressDialog zeigen (mit OnClickListener) nur weiß ich nicht wie ich den jetzt in die MainActivity.java einbinden soll. Deswegen Frage ich
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

ich bitte um Entschuldigung , aber ich muss erst mal ein wenig sondieren , wie viel Vorkenntnisse du hast. :)
Nun , nachdem du den Button deklariert hast und diesem einen Clicklistener zugewiesen hast, kannst du den ProgressDialog
anzeigen lassen.
Diesen kannst du beim Start auf invisible setzen und beim Listener auf Visible.

Was du letztendlich mit dem Progress anstellen möchtest und woher der die Wert bekommt , entzieht sich noch meiner Kenntnis.
 
Ja schon aber wie schreibe ich das rein? bzw. wo?
 
Zuletzt bearbeitet von einem Moderator:
Was denn bitte von den 5 Schritten , die ich oben erklärt habe ?
Nochmal : wo hängst du genau ?

Clicklistener ?, Visible, unvisible ?, Deklaraion ? Layout ?

P.S kann es sein, dass du blutiger Anfänger bist und du meine Antwort nicht zu
100% zu verstehen weisst ??

P.S BItte vermeide Vollzitate, die sind unnötig ( Habe sie jetzt für dich wieder raus genommen)
 
Zuletzt bearbeitet:
swa00 schrieb:
Was denn bitte von den 5 Schritten , die ich oben erklärt habe ?
Nochmal : wo hängst du genau ?

Clicklistener ?, Visible, unvisible ?, Deklaraion ? Layout ?
Ich würd mal sagen überall. bisher habe ich ja nur im layout den button hinzugefügt. Die SnackBar funzt. In der MainActivity.java habe ich noch nichts mit dem neuen Button. deshalb weiß ich wie ich es mache da ich da schon public MainActivity extends AppCompatActivity. diese ist von der SnackBar. wie soll ich jetzt einen ProgressDialog für den neuen Button machen?
 
Ich habe mir gerade Deinen Code angesehen, und frage mich gerade, was der Zweck der App ist.

Zur Zeit ist es es eher eine leere Hülle. Beschreibe mal kurz, was deine App im fertigen Zustand machen soll. Ich habe gerade das Gefühl, dass du Dich mit Nebenkriegsschauplätze beschäftigst.
So ist es extrem schwer zu helfen. Ich wüsste nämlich nicht, wofür du ein ProzessDialog brauchst.

Sprich es gibt kein "Prozess" in Deiner App.
 
  • Danke
Reaktionen: swa00
Ok, jetzt kommt ein wenig Klarheit in die ganze Sache :)

Vorab : Lies dir bitte mal dieses hier durch, dann hätten wir nicht so lange hin und her schreiben brauchen,
bis ich deinen Kenntnisstand ermitteln konnte :)
[LEITFADEN] Wie bekomme ich die effektivste Hilfe ?

Nun , dir Fehlen die Grundlagen , deshalb war ich auch ein wenig Verwirrt , dass du schon Elemente
verwendest ,die man normalerweise dann noch nicht verwenden sollte.

Auch geht aus deinem Quellcode überhaupt nicht der Zweck deiner App hervor.
Ich kann da auch gar kein Konzept erkennen


Wenn du dir die Grundlagen von Markus anschaust , dann wirst du verstehen , wie ein Progessdialog
aufgebaut ist .

Diesen setzt du am besten OOP orientiert in einen neue Klasse und reagierst auf den Clicklistener
von onClick() deines Buttons , mit dem du dir dann eine neue Instanz Deiner Klasse aufrufst.

Für diesen Schritt - um ihn auch mal zu erlernen , solltest du dir mal ein frisches Projekt aufmachen
und erst mal erlernen , wie man auf Buttons reagiert , wie man sie erstellt und wie man eine ProgressDialog
behandelt und wie man diesem auch Daten zukommen lässt.

Dazu benötigst du das Wissen von Threads
Android background processing with Handlers, AsyncTask and Loaders - Tutorial

Alles ein bisschen too much , wenn man erst mal erlernen muss, wie ein UI unter Android genau funktioniert.
Fange lieber klein an
 
Ups. Ja ich bin Blutiger anfänger....
 
Gut. Dann sei Dir gesagt, dass du Dich gerade mit Sachen beschäftigst, wo man schon etwas Erfahrung braucht.

Erste Frage: Was soll deine App machen?
 
  • Danke
Reaktionen: swa00
@markus.tullius, ich gebe mal jetzt vorab an dich ab ... sonst verwirren wir ihn nur .
(Ich übernehme dann , wenn du raus bist)

Fakt ist : Er sollte vorne Anfangen
 
markus.tullius schrieb:
Erste Frage: Was soll deine App machen?

Nur den ProgressDialog und die SnackBar anzeigen. ich übe das nähmlich
 
Bau Dir lieber eine richtig funktionierende App - ein Spiel, ein Notizbuch oder etwas, was du schon immer haben wolltest.
Dabei lernst du wesentlich mehr!
Ich programmiere als erste App immer eine Mandelbrot-Menge (Apfelmännchen).

Für einen ProzessDialog brauchst du irgendeine Funktion, die im Hintergrund länger läuft. Sprich, du brauchst zuerst so etwas, bevor du weitermachen kannst.
 
  • Danke
Reaktionen: lordzwieback und swa00
Ich habs hinbekommen! ohme dass etwas heruntergeladen werden muss oder sowas. kann ich da irgendwie einstellen, dass es nachdem ss auf 100% gelamht ist, nicht den Dialog schließt, sondern kurz auf indeterminate wechselt und dann erst schließt? hier der code:

Code:
[USER=3517]@override[/USER]
        public void onClick(View v){
            PROGRESSDIALOG = new ProgressDialog(MainActivity.this);
            PROGRESSDIALOG.setMax(100);
            PROGRESSDIALOG.setProgress(0);
            PROGRESSDIALOG.setMessage("Wird heruntergeladen, bitte warten...");
            PROGRESSDIALOG.setCancelable(false);
            PROGRESSDIALOG.setProgressStyle(PROGRESSDIALOG.STYLE_HORIZONTAL);
            progressBarHandler.sendEmptyMessage(0);
            PROGRESSDIALOG.show();}});
          
            progressBarHandler = new Handler() {
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (progressBarStatus >= 100) {
                    PROGRESSDIALOG.dismiss();}
                else{
                    progressBarStatus ++;
                    PROGRESSDIALOG.incrementProgressBy(01);
                    progressBarHandler.sendEmptyMessageDelayed(0, 100);
                }}};
 
Zuletzt bearbeitet von einem Moderator:
Glückwunsch! :)

Nur leider sollte man es seit Android 4.0 so nicht mehr machen. Versuche mal statt ein Dialog ein FragmentDialog zu benutzen. Und ersetze denn Hander.delayed durch ein Thread oder Asynctask. Wenn du das schaffst, bist du fast am Ziel.

Schön wäre auch noch, wenn du das Layout des ProgressDialog durch ein eigenes Layout anpassen würdest. :)

Noch eine Anmerkung zur Lesbarkeit von Code. In Java werden nur Konstanten in Großbuchstaben geschrieben. Variablen wie "PROGRESSDIALOG" werden klein geschrieben (progressDialog).
 
markus.tullius schrieb:
Versuche mal statt ein Dialog ein FragmentDialog zu benutzen. Und ersetze denn Hander.delayed durch ein Thread oder Asynctask.

Kannst du mir dabei helefen? müsste ich da nur etwas ersetzen? oder komplett neu schreiben?
 
Hier ein überarbeiteter Code:


Code:
progressbutton=(Button)findViewById(R.id.progressButton);
    useless=(ImageView)findViewById(R.id.progressImage);
    progressbutton.setOnClickListener(new View.OnClickListener(){
  
    [USER=3517]@override[/USER]
        public void onClick(View v){
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setMax(100);
            progressDialog.setProgress(0);
            //progressDialog.setTitle("");
            progressDialog.setMessage("Bitte warten...");
            progressDialog.setCancelable(false);
            progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);
            progressDialog.setIndeterminate(false);
            progressBarHandler.sendEmptyMessage(0);
            progressDialog.show();}});
          
            progressBarHandler = new Handler() {
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (progressBarStatus>=100) {
                    progressDialog.dismiss();
                }
                else{
                    progressBarStatus ++;
                    progressDialog.incrementProgressBy(1);
                    progressBarHandler.sendEmptyMessageDelayed(0,100);}}

            private boolean progressDialog ( int PD1 )
                {
                    return true;
                }};


wie mache ich daraus ein DialogFragment? und einen Thread?
 
Wie kann ich in den jetzigen Code aus meinem letzten Beitrag, so weiterprogrammieren, dass eine Datei aus dem Internet heruntergeladen wird?
 

Ähnliche Themen

S
Antworten
0
Aufrufe
597
Sergio13
S
M
  • MikelKatzengreis
Antworten
5
Aufrufe
171
swa00
swa00
M
Antworten
3
Aufrufe
859
maksimilian
M
Zurück
Oben Unten