Android 按钮背景未按需要更改

Android 按钮背景未按需要更改,android,button,imagebutton,Android,Button,Imagebutton,有人知道为什么这段代码没有按要求更改按钮的背景图像吗 protected void onResume() { // TODO Auto-generated method stub super.onResume(); Toast.makeText(getApplicationContext(), "Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show(); pri

有人知道为什么这段代码没有按要求更改按钮的背景图像吗

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

}
如果用户第一次按下按钮,则应将
布尔值设置为true并启动新活动。在新活动中,当用户按下按钮返回到上一个活动时,现在应将图像设置为不同,因为
布尔值设置为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);
        }
    });
在第二个活动中

    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);
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_review);
//从应用程序获取订单项并分配给列表
orderItems=Order.getInstance().getOrderItems();
sendBtn=(ImageButton)findViewById(R.id.confirmOrder);
sendBtn.setVisibility(View.VISIBLE);
sendBtn.setBackgroundResource(R.drawable.confirm);
sendBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Intent k=新的Intent(v.getContext(),SectionsActivity.class);
int tableNum=Order.getInstance().getTableNumber();
int coverNum=Order.getInstance().getCoverNumber();
itemNames=newarraylist();
//点菜
对于(int i=0;i
由于无法保证Android不会清除您的
变量
或者您的
活动
,如果它需要内存或者GC无法获取,那么您需要在
onPause()中处理这些
变量
的存储。您可以将它们存储在
SharedPrefs
中,以便在
onResume()中检索它们

另一个可能更简单的选项是使用
StartActivityForResult()
,在
SecondActivity
setResult()
中,将
RESULT\u code
返回,指示将
变量
更改为
true
。这样您就不需要在
FirstActivity

requestCode如果>=0,则当活动退出时,将在onActivityResult()中返回此代码


您应该查找您发送的请求代码。通过这种方式,您可以在同一个
活动中多次使用
startActivityForResult
,如果您需要不同的内容

在执行
onResume()时是否验证了
sent==true
?@codeMagic检查后,我注意到当用户返回到它时,
sent==false
,但我想不出为什么要重置变量。有什么建议吗?这是真的,同时也不是真的。首先,不要对状态使用SharedReferences!使用onRetain。。在活动中(请参阅)。其次,我怀疑这里发生的事情是这样的——变量很可能在其他地方重置(onStart可能是一个很好的罪魁祸首)。一种确定的方法是实际使用布尔对象。如果它正在被清理,它将是空的,不是假的。我理解你的观点,可能还有其他的东西。但我认为这是一个很好的起点,因为它应该解决OP当前的问题,并帮助消除未来的问题。它不是保存“state”,而是一个变量来告诉它返回时该做什么。它实际上想改变状态,而不是保持状态
SharedPrefs
可能不是最好的解决方案,这就是为什么我建议
startActivityForResult()
为了保持简单,我将尝试您的第二种选择。我会让你知道我的进展!谢谢你的帮助,我认为在这种情况下,这是更好的选择,但是如果需要的话,我会把另一个留给其他人。祝你好运,希望能有所帮助!我试过了,但没用……如果你不介意的话,我在上面添加了对代码的编辑。
    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);
}