0

TextView のテキストが変更されないのはなぜですか? TextViewview.post メソッドから変更しようとしているwho のテキストがあります。ここで何が間違っていますか?

mTextView = (TextView)findViewById(R.id.text_view);

new Thread(new Runnable() {
    @Override
    public void run() {
        mTextView.post(new Runnable(){
            @Override
            public void run() {
                mTextView.setText("A change in text, thank you very much");
            }
        });
    }
}).start();

これはアクティビティの onCreate() メソッドで実行されます。ただし、ハンドラーを定義して Runnable をハンドラーに渡すと、TextView が変更されます。

編集:ここにあるコードは、例に基づいています:

public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            final Bitmap bitmap =
                    loadImageFromNetwork("http://example.com/image.png");
            mImageView.post(new Runnable() {
                public void run() {
                    mImageView.setImageBitmap(bitmap);
                }
            });
        }
    }).start();
}

http://developer.android.com/guide/components/processes-and-threads.html

編集2:今、私は完全に混乱しています。アクティビティのボタンにアタッチされた onClickListener から同じコードを実行すると、TextView のテキストが実際に操作されます。onCreateメソッドでこれが起こらなかったのはなぜですか?

4

3 に答える 3

2

アクティビティでテキスト ビューを更新するには、runOnUiThread を使用する必要があります

runOnUiThread(new Runnable() {
    @Override 
    public void run() { 
        mTextView.setText("A change in text, thank you very much"); 
    }
}); 

AsycTask を使用して Imageview にイメージをロードすることができます

public class ImageLoadTask extends AsyncTask<Void, Void, Bitmap> {

    private String url;
    private ImageView imageView;

    public ImageLoadTask(String url, ImageView imageView) {
        this.url = url;
        this.imageView = imageView;
    } 

    @Override 
    protected Bitmap doInBackground(Void... params) {
        try { 
            URL urlConnection = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) urlConnection
                    .openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return null; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        imageView.setImageBitmap(result);

       // you can also update your textview here 

    } 

} 

そして、Onclickでこのタスクを呼び出します

button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // pass your url and your imageview 
                // eg :http://example.com/image.png
                // imageView=(your ImageView)
                   new ImageLoadTask(url, imageView).execute();
            }
        });
于 2015-05-02T12:59:09.053 に答える
0

なしで実行するだけnew Thread(new Runnable()

     mTextView.post(new Runnable(){

         @Override
         public void run() {

             // anything you want
         }
     });
于 2015-05-02T13:03:02.270 に答える