所以我希望此按钮以及TextView和LinearLayout在另一个活动上按下按钮之前是不可见的,但是当我返回MainActivity(具有按钮以及textview和linearlayout的活动)时,东西仍然不可见。
谢谢。
MainActivity.java
textView.findViewById(R.id.textView);
textView.setVisibility(View.INVISIBLE);
ToggleButton button=findViewById(R.id.button);
button.setVisibility(View.INVISIBLE);
LinearLayout alarmLayout=findViewById(R.id.alarmLayout);
alarmLayout.setVisibility(View.INVISIBLE);
String value=getIntent().getStringExtra("buttonStatus");
if(value.equals("Visible")){
button.setVisibility(View.VISIBLE);
alarmLayout.setVisibility(View.VISIBLE);
textView.setVisibility(View.VISIBLE);
AlarmFrequency.java
Button create = findViewById(R.id.create);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(alarmFrequency.this,
MainActivity.class);
intent.putExtra("buttonStatus","Visible");
答案 0 :(得分:1)
我对您的代码进行了很少的更改以在我的PC上运行它。
MainActivity.java
textView=findViewById(R.id.textView);
textView.setVisibility(View.INVISIBLE);
//make textView visible
Intent i= getIntent();
String value = i.getStringExtra("buttonStatus");
if (i!=null && value!=null && value.equals("Visible")) {
textView.setVisibility(View.VISIBLE);
}
//button to go to second activity
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
}
});
SecondActivity.java
Button create = findViewById(R.id.create);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this, MainActivity.class);
intent.putExtra("buttonStatus", "Visible");
startActivity(intent);//launch main activity again
}
});
这使textView在MainActivity中可见。
但是,如果您按返回按钮返回MainActivity,您将不会看到任何变化。
应用程序启动时,应用程序堆栈中仅包含MainActivity。让我们称之为MainActivity1。
然后,您按一个按钮转到SecondActivity。您的应用程序堆栈内容现在为:-MainActivity1 / SecondActivity
然后,当您从SecondActivity重新启动MainActivity时,MainActivity2进入堆栈。 堆栈变为MainActivity1 / SecondActivity / MainActivity2。
更改在MainActivity2中可见,而在MainActivity1中不可见。如果您使用“后退”按钮返回MainActivity1,textView将仍然不可见。
还要注意,MainActivity1是从另一个意图启动的,MainActivity2是从SecondActivity中的不同意图启动的。
编辑:-
如果要在MainActivity1中进行更改,则需要使用startActivity作为结果。需要更改以下代码:-
MainActivity.java
textView=findViewById(R.id.textView);
textView.setVisibility(View.INVISIBLE);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(i,100);
}
});
//在onCreate之外
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data!=null)
{
String value = data.getStringExtra("buttonStatus");
if(value!=null && value.equals("Visible")) {
Log.d("Debug", "i am here.");
textView.setVisibility(View.VISIBLE);
}
}
}
SecondActivity.java
Button create = findViewById(R.id.create);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this, MainActivity.class);
intent.putExtra("buttonStatus", "Visible");
setResult(RESULT_OK, intent);
finish();
}
});
在how-to-pass-data-from-2nd-activity-to-1st-activity-when-pressed-back-android
上了解有关此更改的更多信息答案 1 :(得分:0)
您的if(value.equals("Visible"))
在onCreate
中吗?它应位于onResume
下,否则仅在调用onCreate
时执行一次。