2017-01-16 5 views
0

Я сделал индикатор прогресса в Android, но он совсем не работает. Что я делаю не так? Я только начал изучать андроид. Ниже мой код.Android Progress Bar не работает

MainActivity.java-

public class MainActivity extends AppCompatActivity { 
    ProgressBar progressBar; 
    int mporgress=0; 
    EditText time; 
    private Handler mHandler = new Handler(); 
    private static final int PROGRESS = 0x1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
      public void Startbuttononclick(View view){ 
       Button startbutton=(Button) findViewById(R.id.button); 
       startbutton.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 

         mporgress = Integer.parseInt(time.getText().toString()); 
         progressBar.setProgress(mporgress); 

         new Thread(new Runnable() { 
          public void run() { 
           while (mporgress < 100) { 
            // Update the progress bar 
            mHandler.post(new Runnable() { 
             public void run() { 
              progressBar.setProgress(mporgress); 
              mporgress = doWork(); 
              try{ 
               Thread.sleep(1000); 
              }catch (InterruptedException e){} 
             } 
            }); 
           } 
          } 
         }).start(); 

        } 
       }); 
      } 
    public void doprogress(View view) { 

    } 
     public int doWork(){ 
        mporgress++; 
      return mporgress; 
     } 
} 

Activity_main.xml-

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.android.progressbar.MainActivity"> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Enter the time:" 
     android:inputType="number" 
     android:id="@+id/editText" /> 

    <ProgressBar 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="500dp" 
     android:layout_height="200dp" 
     android:id="@+id/progressBar4" 
     android:layout_gravity="center" 
     android:scrollbarSize="500dp" /> 

    <Button 
     android:text="START" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button" 
     android:layout_gravity="center" 
     android:onClick="Startbuttononclick" /> 
</LinearLayout> 

Проверить этот файл ценам ниже - https://i.stack.imgur.com/2TBIb.png

Примечание- Введите время в этом изображении является EditText с подсказкой, а не с TextView.

Он появляется, но не работает.

Я сделал эти изменения так far.- https://i.stack.imgur.com/UujpB.png

Но до сих пор прогресс бар по-прежнему непрерывно вращается.

+0

Определение "не все работает". Не отображается вообще? Не обновление? Что-то еще? –

+0

@GabeSechan Я обновил вопрос. Пожалуйста, просмотрите его. – Knattic

+0

Я думаю, это потому, что вы вызываете сон на MainThread. Попробуйте перевести вызов сна во внешнюю нить. –

ответ

1

Кажется, вы забыли инициализировать EditText -time и ProgressBar. Init его внутри onCreate:

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

    progressBar =(ProgressBar) findViewById(R.id.progressBar4); 
    time = (EditText) findViewById(R.id.editText); //here 
} 

Также внутри кнопки мыши bar:

progressBar = new ProgressBar(this); 
mporgress = Integer.parseInt(time.getText().toString()); 
    ................ 
      ............. 
+0

Приложение все еще разбивается. Ниже приводится log- java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.ProgressBar.setProgress (int)' на ссылке нулевого объекта – Knattic

+0

@Knattic Вам необходимо инициализировать каждый вид через findViewById. Они не волшебным образом заполняются, когда вы вызываете setContentView. –

+0

Да, извините, я забыл это сделать. – Knattic