2010-11-25 21 views
0

getViewに以下のコードがあります。それはイメージビューを画像で埋め込み、問題なく動作します。問題は、画面上の何かをクリックするまで画像が表示されないことです。また、リストビューに複数の画像があると、画面上の何かをクリックすると画像が前後に移動します。Android AsyncTaskリストビューの問題

    class Thumbnailer extends AsyncTask<String, Void, Bitmap> { 

         @Override 
         protected void onPostExecute(Bitmap result) { 
          image_main.setImageBitmap(result); 
          image_main.setVisibility(View.VISIBLE); 
          image_table.setVisibility(View.VISIBLE); 
         } 
         @Override 
         protected void onProgressUpdate(Void... progress) { 
         } 

         @Override 
         protected Bitmap doInBackground(String... params) { 
          BitmapFactory.Options o = new BitmapFactory.Options(); 
          o.inJustDecodeBounds = true; 
          BitmapFactory.decodeFile(params[0], o); 
          final int REQUIRED_SIZE=70; 

          //Find the correct scale value. It should be the power of 2. 
          int width_tmp=o.outWidth, height_tmp=o.outHeight; 
          int scale=1; 
          while(true){ 
           if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) 
            break; 
           width_tmp/=2; 
           height_tmp/=2; 
           scale++; 
          } 
          //Decode with inSampleSize 
          BitmapFactory.Options o2 = new BitmapFactory.Options(); 
          o2.inSampleSize=scale;         
          return BitmapFactory.decodeFile(params[0], o2); 
         } 
        } 
        new Thumbnailer().execute(image); 
+1

image_mainはどこに設定されていますか?これは再利用されたリスト項目の問題のようです... –

+0

get_viewにimage_mainが設定されています – Paul

答えて

1

私はあなたがuiに接続されている任意のビューを使ってAsyncTaskサブクラス内で操作を行うことはできないと思います。コンストラクタを介してThumbnailerクラスにハンドラを渡し、メッセージビューを更新するUIのスレッドで。 onPostExecuteでは、message.obj内のデコードされたビットマップでメッセージを送出し、handleMessageメソッドでImageViewビットマップを設定します。

0

は、コンストラクタを介してViewあなたThumbnailerに渡してみて、その後、onPostExecuteview.invalidate()として最後の行を呼び出します。これにより、Viewが強制的に再描画されます。

+0

ビューをThumbnailerに渡すにはどうすればいいですか?周囲を検索するが、実際には何も見つかりませんでした。 – Paul

+0

'getView'は何を返していますか? image_main? –

+0

image_mainはリストビュー行の画像ビューです – Paul

1

your previous questionに書いたとおり、近くにあるすべての画像をImageViewウィジェットに読み込もうとしていますが、そうは思わしくありません。この特定のタスクで処理している行についてはAsyncTaskImageViewを渡す必要があります。

ビューをサムネイルに渡すにはどうすればよいですか?

Knego氏が提案したとおり、コンストラクタに入力してください。

+0

これはすべて、アダプタの 'getView()'で実行されます。コード(おそらく)は、作成/編集されたばかりの 'imageview'を返します。問題はAsyncTaskの内部で(ゆっくりと)変更が行われ、 'imageview'が直ちに返される点です。 AsyncTaskが完了したら、単に 'imageview.invalidate()'を呼び出す必要があります。そう、マスター? –

+0

Peter私は上記のPastebinを使用してコード全体を投稿しました。私はかなり新人のコーダーなので、午前7時から終わったので、午前中は簡単にlolしてください。asynctask全体を把握するのにかなり長い時間をかかりました。 – Paul

+0

@Peter Knego:「これはすべて、アダプタのgetView() "それは内部クラスなので、できません。 "コード(おそらく)は、作成/編集されたばかりのイメージビューを返します。" - それは内部クラスなので、それはむしろ間違っているアクティビティのデータメンバーでなければなりません。 "AsyncTaskが完了したら、単にimageview.invalidate()を呼び出す必要があります。" - 必要はありません。 – CommonsWare

関連する問題