我试图在选择子活动中的弹出菜单中的项目时更改主要活动的背景颜色。但是,当我运行该应用程序并选择所述项目时,该应用程序崩溃。这是次活动代码:选择弹出菜单项目时发送意图
public class Modify extends AppCompatActivity {
Button button, submit;
EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.modify);
button = (Button) findViewById(R.id.button);
submit = (Button) findViewById(R.id.submit);
edit = (EditText) findViewById(R.id.editText);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu pop = new PopupMenu(Modify.this, button);
pop.getMenuInflater().inflate(R.menu.menu,pop.getMenu());
pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
Intent i = new Intent(Modify.this, MainActivity.class);
switch (item.getItemId()){
case R.id.red:
i.putExtra("color","red");
break;
//TODO add more colours
default:
return false;
}
return true;
}
});
pop.show();
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = edit.getText().toString();
Intent intent = new Intent();
intent.putExtra("MESSAGE", message);
setResult(2, intent);
finish();
}
});
}
}
我真的不知道,如果在每一种情况下,我宣布的意图实际上是让回changeBackground方法的主要活动:
public class MainActivity extends AppCompatActivity {
//GLOBALS
TextView txt;
Button btn;
RelativeLayout rel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView) findViewById(R.id.Text);
btn = (Button) findViewById(R.id.Btn);
rel = (RelativeLayout) findViewById(R.id.activity_main);
Intent intent = getIntent();
String color = intent.getStringExtra("color");
changeBackground(color);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//ON CLICK SETS INTENT
Intent intent = new Intent(MainActivity.this, Modify.class);
//INTENT STARTS ACTIVITY 2
startActivityForResult(intent, 2);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
//SET TEXT WHEN RESULT IS ACCEPTED
String message = data.getStringExtra("MESSAGE");
txt.setText(message);
}
}
public void changeBackground(String color) {
if (color.equals("red")) {
rel.setBackgroundColor(Color.RED);
} else if (color.equals("green")) {
rel.setBackgroundColor(Color.GREEN);
} else if (color.equals("blue")) {
rel.setBackgroundColor(Color.BLUE);
}
}
}
你的'startActivityForResult()'在哪里?显示logcat – tahsinRupam
我有一个startActivityForResult()文本额外。然而,我可以用一个子活动的意图来设置主活动的背景颜色,这个子活动会发送额外的东西作为changeBackground方法的参数传递吗? –
请在下面检查我的答案。 – tahsinRupam