2013-03-16 53 views
0

有谁知道为什么此代码不会根据需要更改我的按钮的背景图像吗?按钮背景不会根据需要更改

protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    Toast.makeText(getApplicationContext(), "Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show(); 
    price.setText(String.valueOf(Order.getInstance().getAmount())); 


    if(Order.getInstance().getOrderItems().size() > 0 && sent == false){ 

     sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
     sendBtn.setVisibility(View.VISIBLE); 
     sendBtn.setBackgroundResource(R.drawable.send); 
     sendBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "Review Order Screen", Toast.LENGTH_SHORT).show(); 
       Intent i = new Intent(v.getContext(), ReviewOrderActivity.class); 
       sent = true; 
       startActivity(i); 
      } 
     }); 
    }else if(sent == true){ 
     sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
     sendBtn.setVisibility(View.VISIBLE); 
     sendBtn.setBackgroundResource(R.drawable.pay); 
     sendBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "Pay Order Screen", Toast.LENGTH_SHORT).show(); 
       //Intent i = new Intent(v.getContext(), PayActivity.class); 
       //startActivity(i); 
      } 
     }); 
    } 

} 

如果用户按下按钮在第一时间就应该设置一个Boolean为true,并启动新的活动。从用户按下按钮返回到上一个活动时的新活动中,现在应该将图像设置为不同,因为Boolean设置为true。

由于某种原因,它不工作...任何帮助非常感谢!

这是活动2中的代码时按下按钮返回用户先前的活动:

sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
    sendBtn.setVisibility(View.VISIBLE); 
    sendBtn.setBackgroundResource(R.drawable.confirm); 
    sendBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Intent k = new Intent(v.getContext(), SectionsActivity.class); 
      int tableNum = Order.getInstance().getTableNumber(); 
      int coverNum = Order.getInstance().getCoverNumber(); 

      itemNames = new ArrayList<String>(); 

      //Get dishes from order 
      for(int i = 0; i < orderItems.size(); i++){ 
       MenuItem item = orderItems.get(i); 
       String itemName = item.getName(); 
       itemNames.add(i, itemName); 
      } 

      RequestTask requestTask = new RequestTask(url, String.valueOf(tableNum), String.valueOf(coverNum), itemNames); 
      ReviewOrderActivity.this.finish(); 
      //startActivity(k); 
     } 
    }); 

EDIT操作的代码:

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    Toast.makeText(getApplicationContext(), "value: " + sent, Toast.LENGTH_SHORT).show(); 
    price.setText(String.valueOf(Order.getInstance().getAmount())); 


    if(Order.getInstance().getOrderItems().size() > 0 && sent == false){ 

     sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
     sendBtn.setVisibility(View.VISIBLE); 
     sendBtn.setBackgroundResource(R.drawable.send); 
     sendBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "Review Order Screen " + sent, Toast.LENGTH_SHORT).show(); 
       Intent i = new Intent(v.getContext(), ReviewOrderActivity.class); 
       startActivityForResult(i, 0); 
      } 
     }); 
    }else if(sent == true){ 
     sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
     sendBtn.setVisibility(View.VISIBLE); 
     sendBtn.setBackgroundResource(R.drawable.pay); 
     sendBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "Pay Order Screen", Toast.LENGTH_SHORT).show(); 
       //Intent i = new Intent(v.getContext(), PayActivity.class); 
       //startActivity(i); 
      } 
     }); 
    } 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == 1) { 

     if(resultCode == RESULT_OK){  
      sent = true;  
     } 
     if (resultCode == RESULT_CANCELED) {  
      sent = false; 
     } 
     } 
    }//onActivityResult 

在第二活动

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.activity_review); 

    //Get order items from application and assign to list 
    orderItems = Order.getInstance().getOrderItems(); 

    sendBtn = (ImageButton)findViewById(R.id.confirmOrder); 
    sendBtn.setVisibility(View.VISIBLE); 
    sendBtn.setBackgroundResource(R.drawable.confirm); 
    sendBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Intent k = new Intent(v.getContext(), SectionsActivity.class); 
      int tableNum = Order.getInstance().getTableNumber(); 
      int coverNum = Order.getInstance().getCoverNumber(); 

      itemNames = new ArrayList<String>(); 

      //Get dishes from order 
      for(int i = 0; i < orderItems.size(); i++){ 
       MenuItem item = orderItems.get(i); 
       String itemName = item.getName(); 
       itemNames.add(i, itemName); 
      } 

      RequestTask requestTask = new RequestTask(url, String.valueOf(tableNum), String.valueOf(coverNum), itemNames); 
      setResult(RESULT_OK); //EDIT 

      ReviewOrderActivity.this.finish(); 
      //startActivity(k); 
     } 
    }); 


    //Create adapter and set to the list 
    adapter = new ReviewOrderArrayAdapter(this, orderItems); 
    this.setListAdapter(adapter); 
} 
+0

当您通过'onResume()'时,是否已验证'sent == true'? – codeMagic 2013-03-16 00:26:38

+0

@codeMagic在检查到用户返回时发现'sent == false'后,@codeMagic ...无法想象为什么该变量正在被重置。有什么建议么? – Javacadabra 2013-03-16 00:33:31

回答

2

由于不保证Android不会清除您的variables甚至Activity如果需要内存或者GC不会将其取出,则需要在onPause()中处理这些variables的存储。你可以将它们存储在SharedPrefs,这样就可以在onResume()

检索它们的另一种可能更简单,选择您所需要的是使用StartActivityForResult()并在SecondActivitysetResult()将传回一个RESULT_CODE指示改变variabletrue。然后,你就不需要设置它在你的FirstActivity

Docs

requestCode如果> = 0,这个代码将在onActivityResult()返回活动退出时。

您应该查找您发送的REQUEST_CODE。这样,如果您需要不同的东西,您可以在同一Activity中多次使用startActivityForResult

+0

这是真的,而不是在同一时间。首先,不要将SharedPreferences用于状态!在Activity中使用onRetain ..(参见[这个问题](http://stackoverflow.com/questions/7782876/how-to-retain-the-state-of-activity-in-android))。其次,我怀疑这是发生在这里的事情 - 这个变量更有可能在其他地方重置(onStart是一个很好的罪魁祸首)。一种确定的方法是实际使用布尔对象。如果正在清理,它将为空,而不是假。 – Delyan 2013-03-16 00:45:37

+0

我明白你的观点,有可能会有别的。但我认为这是一个开始的好地方,因为它应该照顾OP的当前问题并帮助消除未来的问题。它不是保存“状态”,而是一个变量,告诉它在返回时该怎么做。它实际上是想改变状态而不是保持它。'SharedPrefs'可能不是最好的解决方案,这就是为什么我建议'startActivityForResult()' – codeMagic 2013-03-16 00:49:20

+0

我认为保持简单我会尝试第二个选项。会让你知道我怎么样!感谢您的帮助 – Javacadabra 2013-03-16 00:55:50