0

我有这个脂肪脂肪上传(相对于移动设备)。我在一个线程中执行此操作,以便可以访问设备的其余部分。在那个线程中,我正在访问我的自定义标题内的视图。这是线程:

    private OnClickListener send = new OnClickListener() {
        public void onClick(View v) {

            new Thread(new Runnable() {
    public void run() {
        _showView(R.id.progressBar1, true);
        AmazonS3Client s3 = new AmazonS3Client(
                new BasicAWSCredentials("abc",
                        "123"));

        for(Video v : video.getVideos()) {
            s3.putObject(
                    "bucket",
                    "remote_path"
                    new File("some_file");
        }
        _showView(R.id.progressBar1, false);
    }

}).start();
        }
    };


    private void _showView(int resourceId, boolean show) {
        if (show) {
            findViewById(resourceId).setVisibility(View.VISIBLE);
        } else {
            findViewById(resourceId).setVisibility(View.GONE);
        }
    }

如何访问自定义标题栏的视图?

4

3 回答 3

1

您不能在非 UI 线程上操作视图。使用视图的post方法或活动的runOnUiThread方法在视图上执行您的操作。

例如:

private void _showView(int resourceId, boolean show) {

        YourActivityName.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if (show) {
                    findViewById(resourceId).setVisibility(View.VISIBLE);
                } else {
                    findViewById(resourceId).setVisibility(View.GONE);
                }
            }
        });
}
于 2012-04-25T06:49:52.083 回答
1

你应该做这个..

runOnUIThread(new Runnable(){

    public void run(){
       _showView();

    }

 });



 private void _showView(int resourceId, boolean show) {
                if (show) {
                    findViewById(resourceId).setVisibility(View.VISIBLE);
                } else {
                    findViewById(resourceId).setVisibility(View.GONE);
                }
  }

默认情况下,任何类型的 UI 都由 UI 线程处理。如果尝试在任何其他线程中修改它们会导致异常...您也可以使用处理程序

new Handler().post(
    new Runnable(){

            public void run(){
            _showView();

            }

     }
 );
于 2012-04-25T06:51:22.143 回答
1

每件事都像这种方法..

_showView(R.id.progressBar1, true);

尝试更改 UI 应该使用处理程序或 runOnUiThread 来完成。只有主线程可以访问 UI 更改。

于 2012-04-25T06:51:29.040 回答