2011-01-29 2 views
0

onCreateのコードでレイアウトを作成します。このレイアウトの中で、私は登録されたリスナーとスピナーを持っています。ユーザーがスピナー内の項目を変更すると、新しいデータが読み込まれ、データに応じてレイアウトを変更する必要があります。私はonCreateと同じ関数でこれを行います(私はscrollviewと他のビューを作成し、最後の行でsetContentView(scollView)を呼び出します)。setContentViewでGUIを再描画するときにエラーのないアプリケーションブロック

レイアウトは正しく変更されますが、ブロック、スピナー、ボタンはすべてクリックできません。 Logcatはエラーを表示しません(GCで解放された多くのxオブジェクトのみ)。

レイアウトを再描画しようとする前にscrollview.removeAllViews()を呼び出そうとしましたが、それでも役に立ちません。

ここには何が欠けていますか?

+1

コードを投稿してください! – user432209

答えて

0

おそらく、新しい一連のボタンとスピナーオブジェクトを作成しています。これらの新しいオブジェクトにすべてのリスナーを再度登録する必要があります。

+0

レイアウトを作成する私の関数は、スピナーの登録リスナーです。問題は、スピナーがブロックして、アイテムをクリックしたときにそのアイテムを表示せず、アイテムのクリックに応答することはできません。 – DixieFlatline

0

私のonItemSelected関数で問題が見つかりました。この関数では、boolean "firstTime"を変更するのを忘れていました。この関数は繰り返し呼び出されました。

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
     if (firstTime) { 
      //do nothing (just change the flag) because we don't want this called during UI building 
      firstTime=false; 
     }  
     else { 
      posit=pos; 
      String koda=Roaming.m.get(parent.getItemAtPosition(pos).toString()); 
      Roaming.operaterji.clear(); 
      Roaming.parsePrices(json, koda); 
      getAll(); 
      firstTime=true; //FORGET TO SET FLAG BACK TO TRUE, SO THIS WAS CALLED IN A LOOP 
      makeGui(); 


     }   
    } 
関連する問題