为什么在按下按钮后setVisibility()无法使我的按钮和布局可见?

时间:2019-07-15 02:19:14

标签: java android android-studio android-intent

所以我希望此按钮以及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");

2 个答案:

答案 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时执行一次。