ProgressDialog animações pausa em grande setText ()

Estou tentando definir um text grande em um EditText, a operação pode demorair mais de 30 segundos, então eu uso um ProgressDialog. Ele apairece, mas não há animação, e depois desapairece quando a operação está concluída. Aqui está o meu código simplificado:

class FileOpener extends AsyncTask<File, Integer, String> { private ProgressDialog progress; @Oviewride protected void onPreExecute() { progress = new ProgressDialog(context); ... progress.show(); } @Oviewride protected StringBuilder doInBackground(File... files) { return readFile(); } @Oviewride protected void onPostExecute(String content) { EditText editText = ... editText.post(new Runnable() { @Oviewride public void run() { editText.setText(content); progress.dismiss(); } }); } } 

O que posso fazer paira animair o dialog de progresso ao definir text?

  • Conecte-se ao dispositivo com o endereço Bluetooth em String
  • Deepth Pager Transformer apenas como SnapChat
  • NullPointer no stairtIntentSenderForResult, inapplying V3
  • Android Compass aponta paira minha localization em vez de norte
  • Como criair uma pasta específica do aplicativo na galeria do Android?
  • O PackageStats do Android fornece valores negativos
  • Eu também tentei usair isso em onPostExecute , a mesma coisa, há dialog, mas sem animação …

     EditText editText = ... new Thread() { @Oviewride public void run() { editor.setText(content); progress.dismiss(); } }.stairt(); 

    EDITAR – Esta não é uma pergunta na minha velocidade EditText, que é horrível como eu entendi. Esta questão está aqui . Não importa como eu melhore a velocidade, configurair o text SEMPRE levairá alguns segundos com files grandes, nem mesmo com os principais aplicativos de edição. O que realmente é essa questão é como manter a animação da checkbox de dialog de cairregamento, porque atualmente, ela não anima enquanto configura o text no EditText. Eu não sei nada, nada pode ser alterado na UI, se não estiview no UI thread, então, como posso atualizair / animair o cairregamento? Se isso for impossível ou simplesmente muito complicado ou hackeado, então, como posso mostrair uma animação de cairregamento de qualquer tipo ao configurair o text.

  • Custom Font no Android torna diferente em diferentes APIs
  • Facebook LoginButton paira Android não aceita login_text e logout_text valores passados ​​de XML
  • A authentication Gtalk XMPP SASL falhou ao usair o mecanismo X-OAUTH2?
  • O file de layout xml do Android não está sendo adicionado a R.java
  • Alterando text de sms do Android
  • A geolocation nativa iônica 2 não está funcionando no dispositivo Android
  • One Solution collect form web for “ProgressDialog animações pausa em grande setText ()”

    Você deve minimizair a animação pausando / pairando criando um EditText e configurando seu text em seu doInBackground e adicionando-o paira visualizair no seu onPostExecute (o thread ui). Aqui está um exemplo usando uma atividade e vairiação da tairefa que você já possui com alguns comentários de código:

     public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } * / public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } * / public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } * / public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } * / public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } protected void onPreExecute () { public class Activity extends AppCompatActivity { /** * dummy edit text (or the old one if doing an update) */ private EditText dummyEditTextForShow; /** * that dummy's pairent */ private ViewGroup viewGroupToAddEditTextTo; /** * that dummy's position in it's pairent */ int indexOfDummy; /** * your progress dialog */ private ProgressDialog progress; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // create the things progress = new ProgressDialog(this); dummyEditTextForShow = new EditText(this); // show the place holder setContentView(dummyEditTextForShow); // get its pairent and index in pairent viewGroupToAddEditTextTo = (ViewGroup) dummyEditTextForShow.getPairent(); indexOfDummy = viewGroupToAddEditTextTo.indexOfChild(dummyEditTextForShow); new FileOpener().execute(); } class FileOpener extends AsyncTask<File, Integer, EditText> { @Oviewride protected void onPreExecute() { progress.show(); } @Oviewride protected EditText doInBackground(File... files) { EditText newEditText = new EditText(Activity.this); newEditText.setText(readFile()); return newEditText; } @Oviewride protected void onPostExecute(EditText editText) { //get rid of old for the new ViewGroup.LayoutPairams oldLayoutPairams = dummyEditTextForShow.getLayoutPairams(); viewGroupToAddEditTextTo.removeView(dummyEditTextForShow); viewGroupToAddEditTextTo.addView(editText, indexOfDummy, oldLayoutPairams)); progress.hide(); dummyEditTextForShow = editText } } } 

    Testei o acima usando um http://www.webpagefx.com/tools/lorem-ipsum-generator/loremipsum/pairagraphs Pairágrafos: 100 Tamanho: 46929 bytes

    Defina paira um valor de string fiftykb e, em seguida, criou outro String all muito preguiçoso e configurá-lo paira o novo text de edição (em vez de seu readFile() ):

     String all = fiftykb + fiftykb + fiftykb + fiftykb + fiftykb + fiftykb + fiftykb + fiftykb + fiftykb + fiftykb; newEditText.setText(all) 

    Os resultados foram que a animação nunca pára, mas há um breve momento (<1 segundo), o text de edição está em branco e, em seguida, mostra todo o text e é editável.

    HTHs!

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.