Android 如何在活动之间传递视图可见性状态

Android 如何在活动之间传递视图可见性状态,android,android-studio,android-intent,Android,Android Studio,Android Intent,嘿,伙计们,如何在我的项目中使用SharedReferences。我的Main活动和secondactivity中有一个浮动按钮单击浮动按钮时,指南针将被禁用,然后当我进入secondactivity时,指南针将被启用,而不是禁用。如何解决此问题 这是我的代码基础活动 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

嘿,伙计们,如何在我的项目中使用SharedReferences。我的Main活动和secondactivity中有一个浮动按钮单击浮动按钮时,指南针将被禁用,然后当我进入secondactivity时,指南针将被启用,而不是禁用。如何解决此问题

这是我的代码基础活动

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



    FloatingActionButton compass1 = (FloatingActionButton)findViewById(R.id.comp);
    compass1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(findViewById(R.id.relativeLayout1).getVisibility()==View.VISIBLE){
                findViewById(R.id.relativeLayout1).setVisibility(View.GONE);
                Toast.makeText(getApplicationContext(),"Compass Has Been Disabled",Toast.LENGTH_SHORT).show();
            }

            else{

                findViewById(R.id.relativeLayout1).setVisibility(View.VISIBLE);
                Toast.makeText(getApplicationContext(),"Compass Has Been Enabled",Toast.LENGTH_SHORT).show();
            }
        }

    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);



}
@凌驾 公共布尔值onNavigationItemSelected(MenuItem项){


你不需要
SharedReferences
,只需传递一个包含指南针可见性状态的Intent extra即可

从compass1保存状态单击类字段中的侦听器
isCompassVisible

SecondFloor
创建意图时,请执行以下操作:

Intent myIntent = new Intent(this,SecondFloor.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
myIntent.putExtra("isCompassVisible", isCompassVisible);
startActivity(myIntent);
SecondFloor
活动的
onCreate
(或您需要的任何地方):


1.您可以使用共享首选项将值设置为:

SharedPreferences sharedPreferences = getSharedPreferences(Values.SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isShowing", true/false);
editor.apply();
并将其作为:

SharedPreferences prefs = ((Activity)context).getSharedPreferences("TAG", Context.MODE_PRIVATE);
Boolean shown = prefs.getBoolean("isShowing",true);
  • 但最好在意图中传递布尔值
  • 只需通过以下方式传递:

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    Bundle bundle = new Bundle();
    bundle.putBoolean("isShowing",true/false);
    intent.putExtras(bundle);
    startActivity(intent);
    
    并得到它:

    Boolean b = getIntent().getBooleanExtra("isShowing",false);
    
  • 或者,您还可以在任一活动或utils文件夹中使用公共静态布尔变量,您可以从任一活动访问该变量

  • 没有必要创建
    Bundle
    对象,但除此之外你是对的。我不知道如何“从compass1保存状态单击类字段isCompassVisible中的侦听器”。对不起,我是android的新手
    isCompassVisible=findViewById(R.id.relativeLayout1)。getVisibility()==View.VISIBLE?false:true;
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    Bundle bundle = new Bundle();
    bundle.putBoolean("isShowing",true/false);
    intent.putExtras(bundle);
    startActivity(intent);
    
    Boolean b = getIntent().getBooleanExtra("isShowing",false);