0

iはプログレスバーの位置は、呼び出しprogressbar.show前のショー()で変更されたときにプログレスバーが.Sometimesを示していないapplication.Butアンドロイド活動に機能していません。私はstackoverflowのからの多くの他のソリューションを試してみましたが、それらのどれも を働いたプログレスバーは、私はシンプルなログインにプログレスバーを使用しています

btn_login.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 

      uid=usrusr.getText().toString().trim(); 
      upass=pswd.getText().toString().trim(); 

      try { 
       progressBar.setVisibility(View.VISIBLE); 

       checkLogin(uid,upass); 
       progressBar.setVisibility(View.GONE); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 
} 

oncliklistenerボタンで

progressBar= (ProgressBar) findViewById(R.id.progressBar); 
    progressBar.setVisibility(View.GONE); 

:ここ は私のXMLコード

のonCreate()メソッドで
<ProgressBar 
    android:id="@+id/progressBar" 
    android:indeterminateDrawable="@drawable/progress" 
    style="?android:attr/progressBarStyleLarge" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:visibility="invisible" 
    > 
</ProgressBar> 

ですありがとう:/

+0

checkloginの成功時にのみcallBar.setVisibility(View.GONE)を呼び出します – Anonymous

+0

** progressBar **を** checkLogin **メソッドで非表示にしよう – Prem

+0

tryブロック内でprogressBar.setVisibility(View.VISIBLE)を使用しました。 ;およびprogressBar.setVisibility(View.GONE);並行ですので、progressbarはいつも消えています –

答えて

0

コードを追加してくださいo APIを呼び出す前にprogressBarを表示し、要求のresponseprogressBarを閉じます。

Ex。

void checkLogin(String name, String psd){ 
    progressBar.setVisibility(View.VISIBLE); 
    //start the api call 
} 

void onApiCallresponse(){ 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      progressBar.setVisibility(View.VISIBLE); 
      //code for what you want to do after login 
     } 
    }); 
} 
0

"データ処理"コードがUIスレッドで実行されており、目に見える変更はブロックされていると思われましたか?あなたのプログレスバーがまだ表示されない場合は、私は

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     progressBar.setVisibility(View.VISIBLE); 
    } 
}); 

を入れしようと示唆していると何も

0

を助けていないあなたは、このような3秒のためのあなたの進行状況を表示することができます

progressBar.setVisibility(View.VISIBLE); 
      progressBar.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        progressBar.setVisibility(View.GONE); 
       } 
      }, 3000) ; 

    checkLogin(uid,upass); 

しかし、あなたを表示することをお勧めしますログインを確認してapiを起動し、結果を受け取ったときに非表示にするときに進捗します。

+0

ProgressBarのポイントは、呼び出しが実行されていることを示すため、呼び出し結果に応じて表示および非表示にする必要があります。そして、コールが早く終了したら、なぜ3秒待つのですか? あなたの最後のステートメントはtrueです – Rainmaker

+0

最初のステートメントは、プロセスを実行する際の時間支出の近似予測です。あなたがわからないときに結果コールバックを持っていないときに行うことができます。 2番目のステートメントは、再開を受け取ったことを示すコールバックがある場合です。 –

1

次のコードを試してください。

private ProgressDialog progDailog; 
    private Button btn_login; 
    private EditText uid, upass; 
    private String uid1, upass1; 

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

     progDailog = new ProgressDialog(this); 
     progDailog.setTitle("Login"); 
     progDailog.setMessage("Please wait..."); 
     progDailog.setCancelable(false); 

     btn_login = findViewById(R.id.btn_login); 
     uid = findViewById(R.id.uid); 
     upass = findViewById(R.id.upass); 

     btn_login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       uid1 = uid.getText().toString().trim(); 
       upass1 = upass.getText().toString().trim(); 

       progDailog.show(); 


       checkLogin(uid1, upass1); 

       Runnable progressRunnable = new Runnable() { 

        @Override 
        public void run() { 
         progDailog.dismiss(); 
        } 
       }; 

       Handler pdCanceller = new Handler(); 
       pdCanceller.postDelayed(progressRunnable, 3000); 

      } 
     }); 
    } 

ここで、3000は3秒を意味するミリ秒で、要件に応じて変更できます。

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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <EditText 
     android:id="@+id/uid" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="uid" /> 

    <EditText 
     android:id="@+id/upass" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="upass" /> 

    <Button 
     android:id="@+id/btn_login" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="btn_login" /> 

</LinearLayout> 

他の変更が必要な場合は、私にお知らせください。

関連する問題