2012-02-02 14 views
0

私は2つのスピナーを1つの名前付き料理と他のエリアに持っています。私は新しいThetask()を呼び出して、 "init"を引数としてアクティビティのロードを実行します。そして、スピナーは、利用可能な料理とエリアス(ここでは含まれていないもの)のWebサービスから設定する必要があります。そして最初、スピナーは "すべて"を選択し、リストビュー "レストランリスト"にはすべてのレストランがあるはずです。また、ユーザーが料理やエリアをスピナーから変更すると、レストランリストビューは更新され、進捗ダイアログが表示されます。 私の問題は、すべてのコードが動作していますが、リストビューが読み込まれた後に進行状況ダイアログが表示され、戻るボタンが押されるまでprogressDialogが停止することはありません。これについての解決策はgr8ヘルプです。 ありがとうございます。進行状況ダイアログが表示されない

パブリッククラスThetaskは拡張AsyncTask {

 String flagdopost="",x,y;  
    @Override 
    public void onPreExecute() 
    { 
     pg =new ProgressDialog(Restaurantlistdisplay.this); 
     pg.setMessage("fetching info...."); 
     pg.setIndeterminate(true); 
     pg.setCancelable(true); 
     Log.i("inside preexecute","in pre execute"); 
     pg.show(); 

    } 

    public Void doInBackground(String... params) 
    {   
     if(params[0].equalsIgnoreCase("init")) 
     { 
      tempcuisinenamelist = getCuisines();  
      tempcuisinenamelist.add(0,"All"); 

      tempareanamelist=getAreanames(cid, sid, cityid); 
      tempareanamelist.add(0,"All"); 

      flagdopost="init"; 
      Log.i("inside doinbackground 1st",flagdopost); 
     } 

     else if(params[0].equalsIgnoreCase("")) 
     { 
      firequery(); 
      flagdopost="itemselected"; 
      Log.i("inside doinbackground 2nd",flagdopost); 
     } 
     else if(params[0].equalsIgnoreCase("itemclick")) 
     { 
      //sendid=getRestaurantId(params[1],params[2]); 
      x=params[1]; 
      y=params[2]; 
      Log.i("in do in backgroung idforbundle is", Integer.toString(sendid)); 
      flagdopost="itemclicked"; 
     } 
     return null;      
    } 

    public void onPostExecute(Void result) 
    {  
     if(flagdopost.equalsIgnoreCase("init")) 
     { 
      ArrayAdapter<String> adaptercuisine=new       ArrayAdapter<String> (Restaurantlistdisplay.this,android.R.layout.simple_spinner_item,tempcuisinenamelist); 
      adaptercuisine.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      ArrayAdapter<String> adapterarea=new ArrayAdapter<String>(Restaurantlistdisplay.this,android.R.layout.simple_spinner_item,tempareanamelist); 
      adapterarea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      area.setAdapter(adapterarea); 
      area.setSelection(0); 
      area.setOnItemSelectedListener(Restaurantlistdisplay.this); 
      cuisine.setAdapter(adaptercuisine); 
      cuisine.setSelection(0); 
      cuisine.setOnItemSelectedListener(Restaurantlistdisplay.this); 

     } 
     else if(flagdopost.equalsIgnoreCase("itemselected")) 
     { 
      getResult(str); 
      customlist.clear(); 
      populateReslist(); 
      //Log.i("inside 1st firequery","list populated"+customlist.toString()); 

      restaurant.invalidateViews(); 
      restaurant.setAdapter(new SimpleAdapter(Restaurantlistdisplay.this,customlist,R.layout.customlistrow,new String[] {"Restaurant Name","Area Name"}, 
        new int[] {R.id.tvresname,R.id.tvareaname}) 
        { 
        @Override  
        public View getView(int position, View convertView,ViewGroup parent) 
        {   
         View view =super.getView(position, convertView, parent); 
         return view;  
        } 
       }); 

     } 
     else if(flagdopost.equalsIgnoreCase("itemclicked")) 
     {    
      sendid=getRestaurantId(x,y); 
      Bundle bundle=new Bundle(); 
      bundle.putInt("locid",sendid); 
      Toast.makeText(getBaseContext(), "locId in dopost new one"+sendid, 10).show(); 

      Intent resdetail = new Intent(Restaurantlistdisplay.this,Restaurantdetail.class); 
      resdetail.putExtras(bundle); 
      startActivity(resdetail); 

     } 
     pg.dismiss(); 
    } 
} 

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) 
{ 
    switch(arg0.getId()) 
    { 
     case R.id.spncuisine:           asynctaskflag=""; 
       if(cuisine.getSelectedItem().toString()!="All") 
           { 
          cuisineval=cuisine.getSelectedItem().toString(); 
         } 
       else 
       { 
        cuisineval="*"; 
       } 
       new Thetask().execute(asynctaskflag,null,null); 
       break; 

     case R.id.spnarea:     
       asynctaskflag=""; 
       if(area.getSelectedItem().toString()!="All") 
       { 
        areaval=area.getSelectedItem().toString(); 
       } 
       else 
       { 
        areaval="*"; 
       } 
       new Thetask().execute(asynctaskflag,null,null); 
       break; 
    } 

} 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 
} 

// getCuisinesのコード()あなたのすべての要求に応じて以下の通りです。 Cそれは)

if(pg.isShowing()) 
{ 
pg.dismiss(); 
} 

とは何getCuisines(あるpostexecuteでこれを試す

public List<String> getCuisines() 
{ 
     String list = null; 
     cuisinelist=new ArrayList<String>(); 
    try 
    { 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("str", //here goes query to fetch data from table of </br>cuisines); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request);  
    HttpTransportSE aht = new HttpTransportSE(URL);  
    aht.debug = true; 
    aht.call(SOAP_ACTION, envelope); 
    SoapPrimitive results = (SoapPrimitive)envelope.getResponse(); 
     list=results.toString(); 
     } 
     catch (SocketException ex) 
     { 
    ex.printStackTrace(); 
     } 
    catch (Exception e) 
    {   
    e.printStackTrace(); 
     } 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
try 
{ 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document dom = builder.parse(new InputSource(new StringReader(list))); 
    Element root = dom.getDocumentElement(); 
    NodeList items = root.getElementsByTagName("row"); 
    for (int i=0;i<items.getLength();i++) 
    { 
     Node item = items.item(i); 
     NodeList properties = item.getChildNodes(); 
     for (int j=0;j<properties.getLength();j++) 
     { 
      Node property = properties.item(j); 
     String name = property.getNodeName(); 
     if (name.equalsIgnoreCase("typeName")) 
     { 
        cuisinelist.add(property.getFirstChild().getNodeValue()); 
     }      
     } 
    } 
    return cuisinelist;   
    } 
    catch (Exception e) 
    { 
    throw new RuntimeException(e); 
     } 

}

+1

ポストコードをしようとした場合()してください。 – Akram

+0

@Akkiはgetcuisinesのコードを掲載しました。 plzは見ている。しかし、バディは、コントロールが、人口調理のスピナーの直後にスピンナーのitemselectedに行くと、新しいTask()。execute()が再び実行されるので、再度ダイアログがロードされる必要があると思います。 – samir

答えて

1

を助けることができるかどうか;? そこにProgressDialogがありますか?

そのネストされた活動は、その後getCuisinesため

ProgressDialog dialogGoog = new ProgressDialog(getParent()); 
+0

アドバイスをいただきありがとうございます。それは、自宅でcantコードではないため、月曜日に実装されます。会社はそれを許さない。 getcuisinesは、レストランの料理リストを取得するメソッドです。それはwebserviceのksoap mthodを使用して詳細を取得し、大陸、イタリア、中国などのような料理のarraylistを返します。そして、Uの問題は、私はアダプタを設定してアダプタを設定するので、コントロールがすぐにonItemselectedイベントにジャンプします。スピナー。そして、あなたが提案したif pg.isshowingロジックがうまくいかないかもしれませんが、試してみましょう。ありがとう – samir

+0

それはまだリストを表示した後に進行状況のダイアログボックスが表示されます同じ種類の出力を取得してもバディを試した。どんなさらなる提案も助けになるでしょう。 – samir

+0

誰もが私にこれを手伝ってもらえますか? – samir

関連する問題