【问题标题】:Why is setVisibility() not making my button and layout visible after a button is pressed?为什么在按下按钮后 setVisibility() 不让我的按钮和布局可见?
【发布时间】:2019-07-15 02:19:14
【问题描述】:

所以我希望这个按钮和 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");

【问题讨论】:

    标签: java android android-studio android-intent


    【解决方案1】:

    我对您的代码进行了少许更改,以便在我的电脑上运行它。

    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 MainActivity2 再次启动 MainActivity 时,进入堆栈。 堆栈变为 MainActivity1 / SecondActivity / MainActivity2。

    更改在 MainActivity2 中可见,在 MainActivity1 中不可见。如果使用返回按钮返回 MainActivity1,textView 仍然是不可见的。

    还要注意,MainActivity1 是从另一个 Intent 启动的,而 MainActivity2 是从 SecondActivity 中的不同 Intent 启动的。

    编辑:-

    如果您想在 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

    【讨论】:

      【解决方案2】:

      您的if(value.equals("Visible"))onCreate 中?它应该在onResume 下,否则它只会在调用onCreate 时执行一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2021-07-19
        • 2021-01-31
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多