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 に答える