2012-01-13 73 views
0

我有一個列表元素的列表視圖。當我點擊一次時,會向我的服務器發出一個請求,並且在響應進入時顯示吐司,然後在響應進入時顯示另一個吐司。我希望在發生這種情況時禁用列表視圖進行單擊。什麼是最好的方式來做到這一點?我嘗試了一個簡單的布爾值,但不知怎的,它總是在來自服務器的響應進入之前返回到其原始狀態。還嘗試禁用佈局元素,並且不會去。建議?停用onclick listview元素後的監聽器:android

//beginning of my FirstClass 
static boolean wait = false; 

//...some code 

setListAdapter(new ArrayAdapter<String>(this, R.layout.main, arraylist)); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if(!wait){ 
        wait = true; 
        Toast.makeText(getApplicationContext(), "Processing...",Toast.LENGTH_SHORT).show(); 
        String URL = "myurl"; 
        new RequestTask(getApplicationContext()).execute(URL); 
       } 
      } 
     }); 

,然後在我的RequestTask類

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    Toast.makeText(this.context, result,Toast.LENGTH_SHORT).show(); 
    FirstClass.wait = false; // turn it back to false? 
} 

回答

0

我認爲最好的方法是禁用,你必須// start disable,然後在RequestTask禁用。請求任務可能正在另一個線程的後臺執行。這意味着您創建RequestTask後不久就會執行您的代碼(這可能是爲什麼布爾值在請求結束前回到啓用狀態的原因)。但是,如果您通過請求任務對您正在討論的布爾值(通過構造函數)進行引用,則可以允許RequestTask在其HTTP請求完成時解鎖。

所以基本上,給RequestTask一個你正在使用的布爾值的引用,當它的HTTP請求完成時,將其設置爲啓用。或者,在您的活動enableListView()(或可能是backgroundRequestComplete())中定義一個函數,該函數實際將布爾值切換爲啓用。然後爲RequestTask提供對您的活動的引用,並在完成後調用enableListView()方法。

+0

是啊,這是有道理的,但我應該能夠做到這一點沒有引用我的布爾內的請求任務否?我添加了一些代碼來展示我如何試圖使它工作,但即使在響應從服務器進入之前,它仍然會恢復爲false。我不明白這是怎麼可能的,因爲onPostExecute應該在最後發生(對於那個吐司來說,這是真的) – 2012-01-14 15:46:14

0

我不完全知道你做了什麼,有什麼,但對像:

lv.setOnItemClickListener(null); 

對不起,如果我得到你的問題錯了..