2010-06-02 52 views
0

我正在嘗試進行要求獲得某些結果的活動。這個結果通常立即返回(在onCreate中),然而,有時候需要等待一些互聯網內容下載,這導致「加載器」活動顯示。我想要的是,加載器活動不會顯示除progressdialog以外的任何內容(並且您仍然可以選擇在後臺調用加載器活動的舊活動),並且我想知道這是否可行。startActivityForResult僅顯示進度對話框的活動

現在,我使用的的代碼是:

//ListComicsActivity.java 
public class ListComicsActivity extends Activity 
{ 
    private static final int REQUEST_COMICS = 1; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_comics); 

     Button button = (Button)findViewById(R.id.Button01); 
     button.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setAction(Intents.ACTION_GET_COMICS); 
       startActivityForResult(intent, REQUEST_COMICS); 
      } 
     }); 
    } 

    /** Called when an activity called by using startActivityForResult finishes. */ 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     Toast toast = Toast.makeText(this, "The activity finnished", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 


//LoaderActivity.java (answers to Intents.ACTION_GET_COMICS action-filter) 
public class LoaderActivity extends Activity 
{ 
    private Intent result = null; 
    private ProgressDialog pg = null; 
    private Runnable returner = new Runnable() 
    { 
     public void run() 
     { 
      if(pg != null) 
       pg.dismiss(); 
      LoaderActivity.this.setResult(Activity.RESULT_OK, result); 
      LoaderActivity.this.finish(); 
     } 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 


     String action = getIntent().getAction(); 
     if(action.equals(Intents.ACTION_GET_COMICS)) 
     { 
      Runnable loader = new Runnable() 
      { 
       public void run() 
       { 
        WebProvider.DownloadComicList(); 
        Intent intent = new Intent(); 
        intent.setDataAndType(ComicContentProvider.COMIC_URI, "vnd.android.cursor.dir/vnd.mymir.comic"); 
        returnResult(intent); 
       } 
      }; 
      pg = ProgressDialog.show(this, "Downloading", "Please wait, retrieving data...."); 
      Thread thread = new Thread(null, loader, "LoadComicList"); 
      thread.start(); 
     } 
     else 
     { 
      setResult(Activity.RESULT_CANCELED); 
      finish(); 
     } 
    } 

    private void returnResult(Intent intent) 
    { 
     result = intent; 
     runOnUiThread(returner); 
    } 
} 
+0

我不明白加載器活動的重點,如果你不想顯示它,爲什麼不把這個可運行的代碼放到一個外部類中,然後在你的調用活動的click事件中啓動呢? – 2010-06-02 18:38:25

+0

關鍵是我可以有不同的裝載機。而且,您可以稍後在不同的應用程序中安裝更多的裝載器。 – Alxandr 2010-06-02 18:39:47

回答

0

事實證明,你可以通過theme -attribute設置activitys到@android:style/Theme.Dialog和調用活動的onCreate - 方法this.setVisible(false);做到這一點。