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