如何在android中设置从其他活动可见的按钮

如何在android中设置从其他活动可见的按钮,android,Android,我有一个非常简单的问题。在我的主要活动中有一个不可见的按钮,我还有第二个活动使该按钮可见。在第二个活动中,我没有问题将按钮设置为可见,但是当我返回到主活动时,按钮仍然不可见 这是我的第二项活动 Button button = (Button) inflatedView.findViewById(R.id.showButton); if (button.getVisibility() == View.INVISIBLE){ button.setVisibility(View.VISIBLE

我有一个非常简单的问题。在我的主要活动中有一个不可见的按钮,我还有第二个活动使该按钮可见。在第二个活动中,我没有问题将按钮设置为可见,但是当我返回到主活动时,按钮仍然不可见

这是我的第二项活动

Button button = (Button) inflatedView.findViewById(R.id.showButton);
if (button.getVisibility() == View.INVISIBLE){
    button.setVisibility(View.VISIBLE);
}
这是Main活动中的resume方法

@Override
protected void onResume() {
    super.onResume();
}
@Override
protected void onResume() {
    if ( Display.showButton){
        mMyButtonToBeHidden.setVisibility(View.VISIBLE);
    }
    super.onResume();
} 
我已经试着让按钮在主活动中可见,并且成功了。但是我想让按钮在第二个类中可见。我已经尝试将意图从第二个活动传递到主活动,但我不知道如何处理主活动中的意图。我无法处理onResume()或onCreate()中的意图,因为它将抛出一个
NullPointExeption


感谢您的帮助。

在您的主要活动的
onResume()
中尝试以下代码:

 try {
     if(getIntent().getExtras().containsKey("your_parameter")) {
         btn.setVisibility(View.VISIBLE);
     }
 } catch(Exception e){
     //...
 }

在第二个活动中,仅当您希望使该按钮可见时,才将“your_parameter”参数作为额外的参数添加到Intent中。

请在主活动的
onResume()
中尝试以下代码:

 try {
     if(getIntent().getExtras().containsKey("your_parameter")) {
         btn.setVisibility(View.VISIBLE);
     }
 } catch(Exception e){
     //...
 }

在第二个活动中,仅当您希望使按钮可见时,才将“your_parameter”(您的参数)参数作为额外参数添加到意图中。

您应该在这两个活动之间建立通信。您可以通过和来实现这一点

主要活动:

public class MainActivity extends Activity {

    public static final int REQUEST_CODE_SECOND_ACTIVITY = 100; // This value can be any number. It doesn't matter at all. The only important thing is to have the same value you started the child activity with when you're checking the onActivityResult.
    public static final String SHOW_BUTTON = "shouldShowButton";

    private Button mMyButtonToBeHidden;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mMyButtonToBeHidden = (Button) findViewById(R.id.buttonToBeHidden);

        findViewById(R.id.openSecondActivity).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), REQUEST_CODE_SECOND_ACTIVITY);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_SECOND_ACTIVITY && resultCode == RESULT_OK) {
            //Check if you passed 'true' from the other activity to show the button, and also, only set visibility to VISIBLE if the view is not yet VISIBLE
            if (data.hasExtra(SHOW_BUTTON) && data.getBooleanExtra(SHOW_BUTTON, false) && mMyButtonToBeHidden.getVisibility() != View.VISIBLE) {
                mMyButtonToBeHidden.setVisibility(View.VISIBLE);
            }
        }
    }
}
第二项活动:

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        findViewById(R.id.hide_main_activity_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra(MainActivity.SHOW_BUTTON, true);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

你应该在这两个活动之间建立沟通。您可以通过和来实现这一点

主要活动:

public class MainActivity extends Activity {

    public static final int REQUEST_CODE_SECOND_ACTIVITY = 100; // This value can be any number. It doesn't matter at all. The only important thing is to have the same value you started the child activity with when you're checking the onActivityResult.
    public static final String SHOW_BUTTON = "shouldShowButton";

    private Button mMyButtonToBeHidden;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mMyButtonToBeHidden = (Button) findViewById(R.id.buttonToBeHidden);

        findViewById(R.id.openSecondActivity).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), REQUEST_CODE_SECOND_ACTIVITY);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_SECOND_ACTIVITY && resultCode == RESULT_OK) {
            //Check if you passed 'true' from the other activity to show the button, and also, only set visibility to VISIBLE if the view is not yet VISIBLE
            if (data.hasExtra(SHOW_BUTTON) && data.getBooleanExtra(SHOW_BUTTON, false) && mMyButtonToBeHidden.getVisibility() != View.VISIBLE) {
                mMyButtonToBeHidden.setVisibility(View.VISIBLE);
            }
        }
    }
}
第二项活动:

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        findViewById(R.id.hide_main_activity_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra(MainActivity.SHOW_BUTTON, true);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

解决问题。在第二个活动中,a有一个以false开头的静态布尔变量。调用第二个活动中的oncreate()后,布尔变量将更改为true。在MainActivity中的onresume()我检查布尔变量是否为true,并更改按钮的可见性

第二项活动

public static boolean showButton = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    showButton = true;

}
主要活动

@Override
protected void onResume() {
    super.onResume();
}
@Override
protected void onResume() {
    if ( Display.showButton){
        mMyButtonToBeHidden.setVisibility(View.VISIBLE);
    }
    super.onResume();
} 

解决问题。在第二个活动中,a有一个以false开头的静态布尔变量。调用第二个活动中的oncreate()后,布尔变量将更改为true。在MainActivity中的onresume()我检查布尔变量是否为true,并更改按钮的可见性

第二项活动

public static boolean showButton = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    showButton = true;

}
主要活动

@Override
protected void onResume() {
    super.onResume();
}
@Override
protected void onResume() {
    if ( Display.showButton){
        mMyButtonToBeHidden.setVisibility(View.VISIBLE);
    }
    super.onResume();
} 

你们是如何有目的地传递物体的?提供一些代码以及logcat textIntent returnBtn=new Intent(这是MainActivity.class);intent.putExtra(“makeButtonVisible”,true);星触觉(返回BTN);你们是如何有目的地传递物体的?提供一些代码以及logcat textIntent returnBtn=new Intent(这是MainActivity.class);intent.putExtra(“makeButtonVisible”,true);星触觉(返回BTN);我的主要活动中已经有一个按钮。我无法执行findViewById(R.id.openSecondActivity).setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图v){startActivityForResult(新意图(MainActivity.this,SecondActivity.class),请求\u CODE\u SECOND\u ACTIVITY);});你的问题很不清楚,我只是想强调一下如何在两个活动之间进行沟通。也许,如果您更新您的答案,以便我能够更清楚地了解您想要实现的目标,我可以更新代码以更好地满足您的需要。如何打开第二个活动?如果您有其他按钮,您只需将“R.id.openSecondActivity”替换为打开第二个活动的视图的id。好的。我的主要活动包括一个按钮,我将调用一个由我创建的蓝牙类来连接到设备。连接到设备后,我将调用第二个活动。第二个活动仅显示已连接设备的列表。当我按下智能手机上的取消返回按钮时,我将返回到主活动,但这次我想显示第二个按钮,该按钮将显示我已连接的设备列表。我的主活动中已经有一个按钮。我无法执行findViewById(R.id.openSecondActivity).setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图v){startActivityForResult(新意图(MainActivity.this,SecondActivity.class),请求\u CODE\u SECOND\u ACTIVITY);});你的问题很不清楚,我只是想强调一下如何在两个活动之间进行沟通。也许,如果您更新您的答案,以便我能够更清楚地了解您想要实现的目标,我可以更新代码以更好地满足您的需要。如何打开第二个活动?如果您有其他按钮,您只需将“R.id.openSecondActivity”替换为打开第二个活动的视图的id。好的。我的主要活动包括一个按钮,我将调用一个由我创建的蓝牙类来连接到设备。连接到设备后,我将调用第二个活动。第二个活动仅显示已连接设备的列表。当我按下智能手机上的取消返回按钮时,我将返回到主活动,但这次我想显示第二个按钮,该按钮将显示我已连接的设备列表。