2013-04-10 2 views
0

J'ai une activité avec 20 boutons et GridView. Un bouton effacer GridView et d'autres ajouter à différentes valeurs GridView. Parfois, je pousse 1-Add, 2-Clear, 3-Add mais je vois que le bouton clear devient enfoncé (couleur Orange) et exécuté 1-Add, 2-Add, 3-Clear. Un bouton de temps clair devient poussé longtemps et ne répond pas du tout, mais les autres boutons fonctionnent. Comment est-ce possible? Mon activité:dans quel ordre des événements onClick exécutés pour le bouton

public class Smena extends Activity 
{ 
    public Nomenklatura Asortiment; 
    GridView gvMain; 
    GridView gvMain1; 
    GridView gvMain2; 
    ArrayAdapter<String> adapter; 
    ArrayAdapter<String> adapter1; 
    ArrayAdapter<String> adapter2; 
    double Sum=0; 
    String Sdacha; 
    String filename="shops345"; 
    Boolean PushX=false; 
    TextView tv1; 
    void Save() 
    { 
     LocalPersistence.witeObjectToFile(this, Asortiment, filename); 
    } 
    public void myClickHandler(View target){ 
     Intent intent1; 
     switch (target.getId()){ 
     case R.id.button1: 
      ButtonOn (Asortiment.SmenaButName[0],Asortiment.SmenaButPrice[0]); 
      break; 
     case R.id.button10: 
      ButtonOn (Asortiment.SmenaButName[9],Asortiment.SmenaButPrice[9]); 
      break; 
     case R.id.button11: 
      ButtonOn (Asortiment.SmenaButName[10],Asortiment.SmenaButPrice[10]); 
      break; 
     case R.id.button12: 
      ButtonOn (Asortiment.SmenaButName[11],Asortiment.SmenaButPrice[11]); 
      break; 
     case R.id.button13: 
      ButtonOn (Asortiment.SmenaButName[12],Asortiment.SmenaButPrice[12]); 
      break; 
     case R.id.button14: 
      ButtonOn (Asortiment.SmenaButName[13],Asortiment.SmenaButPrice[13]); 
      break; 
     case R.id.button15: 
      ButtonOn (Asortiment.SmenaButName[14],Asortiment.SmenaButPrice[14]); 
      break; 
     case R.id.button16: 
      intent1=new Intent(Smena.this,Napitki.class); 
      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button17: 
      intent1=new Intent(Smena.this,Zhevacki.class); 
      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button18: 
      intent1=new Intent(Smena.this,Dobavki.class); 
      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button19: 
      intent1=new Intent(Smena.this,Presmena.class); 
      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button2: 
      ButtonOn (Asortiment.SmenaButName[1],Asortiment.SmenaButPrice[1]); 
      break; 
     case R.id.button20: 
      intent1=new Intent(Smena.this,Orp.class); 
      Asortiment.data.clear(); 
      Asortiment.data1.clear(); 
      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button21: 
      ButtonDel(); 
      break; 
     case R.id.button22: 
      clear(); 
      break; 
     case R.id.button23: 
      intent1=new Intent(Smena.this,Sdacha.class); 

      Save(); 
      startActivity(intent1); 
      break; 
     case R.id.button25: 
      clear(); 
     // checkTv(); 
      break; 
     case R.id.button3: 
      ButtonOn (Asortiment.SmenaButName[2],Asortiment.SmenaButPrice[2]); 
      break; 
     case R.id.button4: 
      ButtonOn (Asortiment.SmenaButName[3],Asortiment.SmenaButPrice[3]); 
      break; 
     case R.id.button41: 
      if(PushX) 
       buttonx(3); 
       else buttonx(2);PushX=true; 
      break; 
     case R.id.button42: 
      if(PushX) 
       buttonx(4); 
       else buttonx(3);PushX=true; 
      break; 
     case R.id.button43: 
      if(PushX) 
       buttonx(5); 
       else buttonx(4);PushX=true; 
      break; 
     case R.id.button44: 
      if(PushX) 
       buttonx(6); 
       else buttonx(5);PushX=true; 
      break; 
     case R.id.button45: 
      if(PushX) 
       buttonx(7); 
       else buttonx(6);PushX=true; 
      break; 
     case R.id.button46: 
      if(PushX) 
       buttonx(8); 
       else buttonx(7);PushX=true; 
      break; 
     case R.id.button5: 
      ButtonOn (Asortiment.SmenaButName[4],Asortiment.SmenaButPrice[4]); 
      break; 
     case R.id.button6: 
      ButtonOn (Asortiment.SmenaButName[5],Asortiment.SmenaButPrice[5]); 
      break; 
     case R.id.button7: 
      ButtonOn (Asortiment.SmenaButName[6],Asortiment.SmenaButPrice[6]); 
      break; 
     case R.id.button8: 
      ButtonOn (Asortiment.SmenaButName[7],Asortiment.SmenaButPrice[7]); 
      break; 
     case R.id.button9: 
      ButtonOn (Asortiment.SmenaButName[8],Asortiment.SmenaButPrice[8]); 
      break; 
     } 
    } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.smena); 
     Intent i=getIntent(); 
     Asortiment=(Nomenklatura) LocalPersistence.readObjectFromFile(this, filename); 
     adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tvText, Asortiment.data); 
     adapter1 = new ArrayAdapter<String>(this, R.layout.item, R.id.tvText, Asortiment.data1); 
     tv1=(TextView) findViewById(R.id.textView1); 
     gvMain = (GridView) findViewById(R.id.gridView1); 
     gvMain.setAdapter(adapter); 
     gvMain1 = (GridView) findViewById(R.id.gridView11); 
     gvMain1.setAdapter(adapter1); 
     gvMain2 = (GridView) findViewById(R.id.gridView2); 
     if(Asortiment.data2.size()<=0) data2clear(); 
     if(i.getExtras().containsKey("Dobavki")) 
     { 
      ArrayList<String> DobavkiList=new ArrayList<String>();  
      DobavkiList=i.getExtras().getStringArrayList("Dobavki") ; 
      for(String item : DobavkiList) 
      { 
       String Art=Asortiment.GetArtByName(item); 
       String [] np=Asortiment.GetNamePriceByArt(Art); 
       ButtonOn (np[0],np[1]); 
      } 
      } 
     if(i.getExtras().containsKey("Napitki")) 
      { 
      ArrayList<String> NapitkiList=new ArrayList<String>();  
      NapitkiList=i.getExtras().getStringArrayList("Napitki") ; 
       for(String item : NapitkiList) 
       { 
        String Art=Asortiment.GetArtByName(item); 
        String [] np=Asortiment.GetNamePriceByArt(Art); 
       ButtonOn (np[0],np[1]); 
       } 
      } 
     if(i.getExtras().containsKey("Zhevacki")) 
      { 
      ArrayList<String> ZhevackiList=new ArrayList<String>(); 
      ZhevackiList=i.getExtras().getStringArrayList("Zhevacki") ; 
       for(String item : ZhevackiList) 
       { 
        String Art=Asortiment.GetArtByName(item); 
        String [] np=Asortiment.GetNamePriceByArt(Art); 
       ButtonOn (np[0],np[1]); 
       } 
      } 
     Double sd; 
     if(i.getExtras().containsKey("Sdacha")) 
     { 

      sd=Double.parseDouble(Asortiment.data2.get(1)); 
      Sdacha=i.getExtras().getString("Sdacha"); 
      sd=Double.parseDouble(Sdacha)-sd; 
     } 
    else 
    { 
     if(Asortiment.data2.size()>0) 
     { 
      Sdacha=Asortiment.data2.get(3); 
      sd=Double.parseDouble(Asortiment.data2.get(1)); 
      if(Double.parseDouble(Asortiment.data2.get(3))>0) 
      sd=Double.parseDouble(Asortiment.data2.get(3))-sd; 
      else sd=(double) 0; 
      }else {sd=(double) 0;Sdacha="0";} 
    } 
     Asortiment.data2.set(3, Sdacha); 
     Asortiment.data2.set(5, sd.toString()); 
     adapter2 = new ArrayAdapter<String>(this, R.layout.item2, R.id.tvText, Asortiment.data2); 
     gvMain2.setAdapter(adapter2); 


    } 
    void buttonx(int k){ 
     if(!Asortiment.LastButton.get(0).equals("0")){ 
     for (int i=0;i<k;i++){ 
      ButtonOn (Asortiment.LastButton.get(0),Asortiment.LastButton.get(1)); 
      }} 
    } 
    void checkTv() 
    { 
     Date dt1=new Date(); 
     if(dt1.getHours()>19 && Asortiment.LastRequest.getDay()<dt1.getDay() && (Calendar.DAY_OF_WEEK==2 ||Calendar.DAY_OF_WEEK==4 || Calendar.DAY_OF_WEEK==6)) 
     tv1.setText("ОТПРАВЬТЕ ЗАЯВКУ"); 
     else tv1.setText("");   
    } 
    void clear() 
     { 
      Asortiment.data.clear(); 
      adapter.clear(); 
      Asortiment.data1.clear(); 
      adapter1.clear(); 
      data2clear(); 
     } 

    void data2clear() 
    { 

     Asortiment.data2.set(1, "0"); 
     Asortiment.data2.set(3, "0"); 
     Asortiment.data2.set(5, "0"); 
     gvMain2.setAdapter(adapter2); 
    } 

    private void ButtonDel() 
    { 
     int cnt= Asortiment.data.size(); 
     if(cnt>0){ 
      Double d=Double.parseDouble(Asortiment.data2.get(1));//1 
      d=d-Double.parseDouble(Asortiment.data1.get(cnt-1)); 
      Asortiment.data2.set(1, d.toString()); 
      //adapter2 = new ArrayAdapter<String>(this, R.layout.item2, R.id.tvText, Asortiment.data2);//1 
      gvMain2.setAdapter(adapter2); 
      Asortiment.data.remove(cnt-1); 
      Asortiment.data1.remove(cnt-1); 
     //adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tvText, Asortiment.data); 
     //adapter1 = new ArrayAdapter<String>(this, R.layout.item, R.id.tvText, Asortiment.data1); 
     gvMain.setAdapter(adapter); 
     gvMain1.setAdapter(adapter1); 
     } 
    } 
    private void ButtonOn (String name, String price) 
    { 
     PushX=false; 
     if(name.length()>15)name=name.substring(0, 15); 
     Asortiment.LastButton.set(0, name); 
     Asortiment.LastButton.set(1, price); 
     Asortiment.data.add(name); 
     Asortiment.data1.add(price); 
     gvMain.setAdapter(adapter); 
     gvMain1.setAdapter(adapter1); 
     Double d=Double.parseDouble(Asortiment.data2.get(1)); 
     d=Double.parseDouble(price)+d; 
     Asortiment.data2.set(1, d.toString()); 
     Double sd=Double.parseDouble(Asortiment.data2.get(3)); 
     if (sd>0) { 
      sd=sd-d; 
      Asortiment.data2.set(5, sd.toString()); 
     } 
     gvMain2.setAdapter(adapter2); 
    } 
} 

Répondre

0

Pour résoudre le problème, ou même de réduire à la question, vous devez factoriser le code. À chaque clic, il y a un tas de choses qui se passent, vous pourriez être submerger les clics. Donnez-vous assez de temps entre les clics?

Et aussi, ne considèrent faire des méthodes génériques, par exemple

if(i.getExtras().containsKey("Napitki")) 
     { 
     ArrayList<String> NapitkiList=new ArrayList<String>();  
     NapitkiList=i.getExtras().getStringArrayList("Napitki") ; 
      for(String item : NapitkiList) 
      { 
       String Art=Asortiment.GetArtByName(item); 
       String [] np=Asortiment.GetNamePriceByArt(Art); 
      ButtonOn (np[0],np[1]); 
      } 
     } 
    if(i.getExtras().containsKey("Zhevacki")) 
     { 
     ArrayList<String> ZhevackiList=new ArrayList<String>(); 
     ZhevackiList=i.getExtras().getStringArrayList("Zhevacki") ; 
      for(String item : ZhevackiList) 
      { 
       String Art=Asortiment.GetArtByName(item); 
       String [] np=Asortiment.GetNamePriceByArt(Art); 
      ButtonOn (np[0],np[1]); 
      } 
     } 

blocs comme ceux-ci peuvent être que des méthodes génériques et peuvent être que vous souhaitez suivre les conventions de java.

Juste une suggestion :)

+0

Merci pour la réponse, j'essaie de refactoriser. Mais les événements doivent être un par un ou ne l'est pas? –

+0

Je pousse les boutons très rapidement; –

+0

Eh bien, les appels effectués surClick aux auditeurs ne sont pas synchronisés. Vous devez appeler une méthode séparée et la rendre 'synchronisée'. Cela pourrait vous donner une meilleure compréhension si vous jetez un coup d'œil sur [ceci] (http://stackoverflow.com/questions/8041951/android-setonclicklistener-to-buttons-firing-twice-when-pressed-too-quick) . –

Questions connexes