【问题标题】:Update two TextViews inside a runnable更新可运行文件中的两个 TextView
【发布时间】:2015-07-17 11:54:50
【问题描述】:

我可以更新一个可运行文件中的两个文本视图吗? 因为我的代码只能更新一个文本视图。 我得到了这个方法,它更新了 2 个文本视图,其中包含来自照片的 EXIF 数据的地址和日期。

public void launchRingDialog() {

        final ProgressDialog ringProgressDialog = ProgressDialog.show(ReportIncident.this, "Please wait ...", "Rendering Image EXIF Data ...", true);

        ringProgressDialog.setCancelable(false);

        new Thread(new Runnable() {

            @Override

            public void run() {

                try {





                    Thread.sleep(5000);
                    loadExifData();
                    r.setDate(mExif.getAttribute(ExifInterface.TAG_DATETIME));
                    tvLocation.setText(getaddress());
                    tvTime.setText(r.getStringDate());
                    r.setLati(Double.parseDouble(mExif.getAttribute(ExifInterface.TAG_GPS_LATITUDE)));
                    r.setLongi(Double.parseDouble(mExif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE)));



                } catch (Exception e) {


                }

                ringProgressDialog.dismiss();

            }

        }).start();

    }

【问题讨论】:

  • 您正在线程中更新 ui。您需要在 ui 线程上更新它们
  • 你遇到了什么问题?
  • 我只能更新一个文本视图。我需要更新两个文本视图。什么是 uithread?
  • 您是否尝试过将第二个 textview 代码更新到第一个 textview 更新的同一位置。
  • 是的。我尝试了其中一个,然后两个都尝试了。只有一个有效。

标签: android textview runnable android-runonuithread


【解决方案1】:

您不能在与 Android 中的 UI 线程不同的线程中更新 UI。为此,您可以使用一种简单的方法:

Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable(){
    tvLocation.setText(getaddress());
    tvTime.setText(r.getStringDate());
});

【讨论】:

  • runOnUiThread 方法是 Activity 特有的,可以看作是我上面提供的更通用解决方案的一个特例。即使您不在 Activity 类中,使用处理程序也可以更新您的 UI。
  • 您的代码有效,但我必须将两个 setTexts 放在 public void run() 中,我的 ringProgressDialog 现在不见了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多