2012-01-13 21 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で無効にすることだと思います。リクエストタスクは、おそらく別のスレッドのバックグラウンドで実行されています。これは、あなたの// end disable?コードがRequestTaskを作成した直後に実行されることを意味します(これはおそらく、ブール値が要求が完了する前に有効に戻っているためです)。しかし、あなたが(コンストラクタを介して)話していたブール値への参照タスクを要求タスクに渡した場合、HTTPリクエストが完了したときにRequestTaskのロックを解除することができます。

基本的に、RequestTaskにはあなたが作業しているブール値への参照を与え、HTTP要求が完了したらそれを有効に設定します。あるいは、実際にブール値を有効に切り替えるアクティビティenableListView()(または多分backgroundRequestComplete())を定義します。その後、RequestTaskにアクティビティへの参照を与え、完了時にenableListView()メソッドを呼び出させます。

+0

...

lv.setOnItemClickListener(null); 

申し訳ありませんが、私はあなたの質問が間違って得た場合RequestTask noの中で私のブール値への参照なしでこれをしますか?どのように動作させようとしているのかを示すコードをいくつか追加しましたが、応答がサーバーから来る前でもfalseに戻っています。私はonPostExecuteが最後に起こるはずなので、それがどのように可能であるのか理解していません(それはそのトーストに当てはまります) –

0

私はあなたがそこに何をしたか全くわからないが、のようなものについて何:ええ、それは理にかなっているが、私のことができるようにする必要があり