1

我试图关闭 AsyncTask 的 onPostExecute() 中的对话框,并在 textview 中设置文本,但 textview 没有改变,我得到“窗口已经聚焦,忽略...的焦点增益”。

这是代码:

    protected void onPreExecute() {
    dialog = ProgressDialog.show(mContext, "","Loading...", true);

}

protected void onPostExecute(Object result) {
    dialog.dismiss();
    tv.setText("some text");

}

显示进度对话框,当我的后台工作完成后,它被关闭,但 textview 没有变化。如果没有进度对话框,则会更新文本视图。

任何想法,解决这个问题?

谢谢!

4

2 回答 2

2

调用尝试此代码段dialog.dismiss()

         if (!dialog.isShowing()) 
            {
                TextView tv = (TextView) findViewById(R.id.textView);
                tv.setText("some text");
            }
于 2012-08-31T16:58:16.257 回答
0
public class MyActivity extends Activity 
     {
/**
 * Called when the activity is first created.
 */
ProgressBar progressBar;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    progressBar = (ProgressBar) findViewById(R.id.pb);
    TextView view=(TextView) findViewById(R.id.myt);
    new Task(view).execute();


}

通过在构造函数中传递 TextView 实例,我们可以在进度条中使用

private class Task extends AsyncTask<Void, Integer, Void> {
    TextView view;
    private Task(TextView textView) {
        this.view= textView;
    }

    int myProgress;

    @Override
    protected void onPreExecute() {
        myProgress = 0;
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Toast.makeText(MyActivity.this,
                "onPostExecute", Toast.LENGTH_LONG).show();

        super.onPostExecute(aVoid);
    }

    @Override
    protected void onProgressUpdate(Integer... values) {

        progressBar.setProgress(values[0]);
        view.setText("Value"+myProgress);
        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();    //To change body of overridden methods use File | Settings | File Templates.
    }


    @Override
    protected Void doInBackground(Void... voids) {
        while (myProgress < 100) {
            myProgress++;

            publishProgress(myProgress);
            SystemClock.sleep(100);
        }
        return null;
    }
}

  }
于 2013-09-23T09:41:24.907 回答