2013-04-10 29 views
0

我有20个按钮和GridView的活动。 单键清除GridView和其他添加到GridView的不同值。 有时候,我按下了1-Add,2-Clear,3-Add,但看到按钮清除变为按下(橙色)并执行1-Add,2-Add,3-Clear。 一段时间按钮清除变为长时间推送,根本不回答,但其他按钮有效。 这怎么可能? 我的活动:以什么顺序执行onClick事件按钮

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); 
    } 
} 

回答

0

为了解决这个问题,甚至缩小到这个问题,你需要重构的代码。每次点击都会发生一堆事情,您可能会淹没点击。点击次数之间是否有足够的时间?

并且也不要考虑做通用的方法,例如

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]); 
      } 
     } 

块像这样的可以做成通用的方法,并且可能是你想跟着Java约定。

只是一个建议:)

+0

谢谢你的回答,我尝试重构。但事件必须是一个一个或不是? – 2013-04-11 00:25:19

+0

我按钮速度非常快; – 2013-04-11 00:28:56

+0

那么,通话完成onClick到听众是不同步的。您需要调用一个单独的方法并使其“同步”。这可能会让你更好地理解,如果你看看[这个](http://stackoverflow.com/questions/8041951/android-setonclicklistener-to-buttons-firing-twice-when-pressed-too-quick)post 。 – 2013-04-11 06:53:03