ProgressBar füllt sich nicht beim betätigen eines button

  • Antworten:3
  • Bentwortet
floor
  • Forum-Beiträge: 6

27.08.2018, 16:19:31 via Website

Hallo Community,

ich habe folgendes Problem, ich habe ein mini Android Programm erstellt, wo man einen Button drücken muss und sich daraufhin eine ProgressBar füllt. Das Programm wir ordnungsgemäß ausgeführt, doch beim drücken des Buttons füllt sich nicht die Bar.

Hier mein Java-Code:

ProgressBar bar;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btn = findViewById(R.id.btn);
    ProgressBar bar = findViewById(R.id.bar);

}

@Override
public void onClick(View v) {

    if (v == btn) {

        bar.setProgress(bar.getProgress() + 10);

    }
}

}

Hier ist auch noch mein XML-Code:

    <TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_marginBottom="64dp"
    android:layout_marginTop="16dp"
    android:text="@string/bsText"
    android:textColor="@android:color/black"
    android:textSize="24dp"
    app:layout_constraintBottom_toTopOf="@+id/bar"
    app:layout_constraintHorizontal_bias="0.039"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.032" />

<ProgressBar
    android:id="@+id/bar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginBottom="75dp"
    android:layout_marginEnd="4dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginStart="4dp"
    android:layout_marginTop="112dp"
    app:layout_constraintBottom_toTopOf="@+id/btn"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/btn"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginBottom="210dp"
    android:layout_marginEnd="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginStart="20dp"
    android:text="Button"
    android:textSize="20dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/bar" />

Ich hoffe ihr könnt mir helfen, dass sich die ProgressBar füllt.
Ich danke im vorraus.

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.527

27.08.2018, 17:43:36 via Website

Hi,
ja Pascal hat recht . Du erstellst in der onCreate eine neue lokale Variable mit dem gleichen Namen.
Diese ist aber nur in der onCreate vorhanden. In der onClick Methode ist sie nicht verfügbar, und du greifst auf die im Klassenrumpf Definierte (globale) Variable zu.
Also lasse den Variablen Typ in der onCreate weg. Somit wird keine neue Variable erstellt sondern auf die globale Klassen Variable zugegriffen.

 btn = findViewById(R.id.btn);
 bar = findViewById(R.id.bar); 
Hilfreich?
floorPascal P.
Kommentieren
floor
  • Forum-Beiträge: 6

27.08.2018, 16:29:43 via Website

Ergänzung: Ich habe bei meiner bar noch einen ClickListener rangehängt, es klappt aber immer noch nicht...

 setContentView(R.layout.activity_main);

    Button btn = findViewById(R.id.btn);
    ProgressBar bar = findViewById(R.id.bar);
    bar.setOnClickListener(this);

}
Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.08.2018, 17:02:45 via App

Hallo floor,
den klick listener braucht aber dein Button und nicht die ProgressBar.

Und hast du die Variablen schon oben in der Klasse definiert?
Wenn ja dann solltest du das in der onCreate nur noch initialisieren...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.527

27.08.2018, 17:43:36 via Website

Hi,
ja Pascal hat recht . Du erstellst in der onCreate eine neue lokale Variable mit dem gleichen Namen.
Diese ist aber nur in der onCreate vorhanden. In der onClick Methode ist sie nicht verfügbar, und du greifst auf die im Klassenrumpf Definierte (globale) Variable zu.
Also lasse den Variablen Typ in der onCreate weg. Somit wird keine neue Variable erstellt sondern auf die globale Klassen Variable zugegriffen.

 btn = findViewById(R.id.btn);
 bar = findViewById(R.id.bar); 
Hilfreich?
floorPascal P.
Kommentieren