2011-11-09 46 views
-1

我試圖從sdcard中的特定文件夾顯示一系列圖像 - 以幻燈片的形式。 filelist []包含該目錄中存在的所有文件的名稱。無法執行基於thread.sleep的循環

我在這裏過濾出圖像。接下來,thread.sleep(1000)似乎沒有任何作用。在1000毫秒後只顯示目錄中的最後一個圖像。我哪裏錯了?任何其他方式,我可以做到這一點?

也許我已經完全錯了。我是一個新手,所以plz的幫助。

public class List_imgActivity extends Activity { 
/** Called when the activity is first created. */ 

Bitmap[] bitmapArray = new Bitmap[1000]; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button pf=(Button) findViewById(R.id.pick_button); 

    pf.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent("org.openintents.action.PICK_DIRECTORY"); 

      intent.setData(Uri.parse("file:///sdcard")); 
      intent.putExtra("org.openintents.extra.TITLE", "Please select a folder"); 
      intent.putExtra("org.openintents.extra.BUTTON_TEXT", "Use this folder"); 
      startActivityForResult(intent, 1); 

     } 

     }); 

    } 
protected void onActivityResult(int requestCode, int recievecode, Intent intent) 
{ 

    if (requestCode == 1) 

    { 
     Uri uri = intent.getData(); 

     try { 
     File f=new File(new URI(uri.toString())); 
     final String nx=f.toString(); 

     if(f.isDirectory()) { 

      File filelist[] = f.listFiles(); 




     for(int i=0;i<filelist.length;i++) 
     { 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 

     e.printStackTrace(); 
    } 
     String filename = filelist[i].getName(); 
     int pos = filename.lastIndexOf("."); 
     String ext = filename.substring(pos); 


     if(ext.equals(".jpg")) 
     { 
      TextView tv1= (TextView) findViewById(R.id.textView1); 
      tv1.setText(filelist[i].toString()); 


      ImageView iv1=(ImageView) findViewById(R.id.imageView1); 





     bitmapArray[i] = BitmapFactory.decodeFile(filelist[i].toString()); 

     iv1.setImageBitmap(bitmapArray[i]); 


     } 

     } 


     } 



    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 





    } 

    } 

} 
+0

發佈整個活動代碼。如果您使用的是線程,請確保您在UI線程上完成的imageview更改不在工作線程中。 – user370305

+0

你確定filelist裏面有1個以上的圖像嗎?如果在循環之前過濾列表,是否有可能以某種方式過濾了除最後一個圖像以外的所有內容? – brianestey

+0

嗨有, 你可以嘗試TimerTask。 – Lucifer

回答

0

ü必須在應用了Thread.sleep()方法

1

在Android中的行爲像這將使UI線程睡眠之前,在當前對象同步。這會凍結手機的整個用戶界面,你的應用程序看起來會崩潰,系統會在一段時間後自動終止你的應用程序。

有一個機制來改變特定時間intervalls中的東西。你應該使用這個處理程序來做到這一點。 Handlers

處理程序有一個postDelayedsendMessageDelayed方法,使您無論是建立,將在一定時間後執行的Runnable或發送必須由您處理程序的實現進行處理的消息。

處理程序的初始化會是這個樣子:

showNextImageHandler = new Handler() { 
    @Override 
    public void handleMessage(android.os.Message msg) { 
     showNextImage(); 
    } 
}; 

showNextImageHandler.sendMessageDelayed(showNextImageHandler.obtainMessage(), 1000); 

這段代碼創建一個新的處理程序每​​收到一個消息時,調用該函數showNextImage。我會將Handler存儲在您的活動的實例變量中,以便稍後發送更多消息。處理程序創建後,第一個空的消息將以延遲發送消息1000毫秒的方式發送。一秒鐘後,showNextImage函數將被調用。在此功能中,您可以更改視圖,並且如果存在下一個圖像,則可以張貼另一個延遲的消息以稍後觸發對該功能的另一個呼叫。