簡體   English   中英

如何將不可見布局設置為永久可見?

[英]How to set invisible layout to visible permanently?

在我的應用程序中,在 MainActivity.java 上我需要顯示兩種布局,一種在初始階段可見,另一種不可見。 當按下按鈕時,不可見的變得可見,可見的變得不可見,這是我編寫的代碼:

public class MainActivity extends AppCompatActivity {

DrawerLayout drawerLayout;
SupportMapFragment supportMapFragment;
SupportMapFragment supportMapFragment1;
FusedLocationProviderClient client;
View checkoutLayout, checkinLayout;
ImageButton checking_button, checkout_button;
Chronometer chronometer;
Handler handler;
long tMillisec, tStart, tBuff, tUpdate = 0L;
int sec, min, millisec, hr;
TextView tv_location, editText_remark, location_checkout, location_remark, dateView, timeView;

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

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

    String date = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
    String currentTime = new SimpleDateFormat("HH:mm", Locale.getDefault()).format(new Date());


    checking_button = findViewById(R.id.checkin_btn);
    chronometer = findViewById(R.id.chrono);
    checkoutLayout = findViewById(R.id.checkOut);
    checkinLayout = findViewById(R.id.checkinLayout);
    checkout_button = findViewById(R.id.checkout_btn);
    tv_location = findViewById(R.id.tv_location);
    editText_remark = findViewById(R.id.editText_remark);
    location_checkout = findViewById(R.id.location_checkout);
    location_remark = findViewById(R.id.Remark_checkout);
    dateView = findViewById(R.id.date_pick);
    timeView = findViewById(R.id.time_pick);


    checkinLayout.setVisibility(View.VISIBLE);
    checkoutLayout.setVisibility(View.INVISIBLE);

    handler = new Handler();

    drawerLayout = findViewById(R.id.drawer_layout);
    supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map_view);
    supportMapFragment1 = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map_view1);
    client = LocationServices.getFusedLocationProviderClient(this);

    // check permission

    if(ActivityCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
        // when permission granted call method
        getCurrentLocation();
    }else{
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
    }

    checking_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(tv_location.getText().toString().isEmpty() || editText_remark.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(), "Please Enter your Location and Remark", Toast.LENGTH_SHORT).show();
            }else {
                checkoutLayout.setVisibility(v.VISIBLE);
                checkinLayout.setVisibility(v.GONE);
                tStart = SystemClock.uptimeMillis();
                handler.postDelayed(runnable, 0);
                chronometer.start();
                location_checkout.setText(tv_location.getText().toString());
                location_remark.setText(editText_remark.getText().toString());
                dateView.setText("Date:"+ date);
                timeView.setText("Punch-In:"+ currentTime);
            }
        }
    });

    checkout_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checkinLayout.setVisibility(v.VISIBLE);
            checkoutLayout.setVisibility(v.GONE);
        }
    });


}

該代碼運行良好,但問題是當我使 checkoutLayot 可見而 checkinLayout 不可見時,當我關閉應用程序並重新打開它時,布局更改為 checkoutLayout 不可見且 checkinLayout 可見,因此我需要使上次訪問的頁面可見。 我是 android 開發的新手,誰能幫我解決這個問題。

您必須為此使用SharePreference ,以保存用戶關閉應用程序時您的應用程序所處的狀態。 用戶按下按鈕后立即將狀態保存在 sharedpreference 中,然后在應用程序的onStart方法中,您可以從SharePreference獲取狀態值,然后相應地顯示您的布局。

首先,您應該將所有變量包括視圖(如 Textview、Handler 等私有)。 其次,我們的朋友@rootass 是對的,您應該使用SharePrference來保存更改。 這是編寫和獲取SharedPreferences的示例。 編寫 SharedPreferences 的代碼...

private SharedPreferences visibilityPreference;
private SharedPreferences.Editor prefEdit;
private final String visibilityKey = "visibility";


private void setVisibility(boolean flag){
  prefEdit = visibilityPreference.edit();
  visibilityPreference = context.getSharedPreferences(visibilityPreferenceName, Context.MODE_PRIVATE);
  visibilityPreference.putBoolean(visibilityKey, flag);
  prefEdit.apply();
}

這里是讀取 SharedPreferences 的代碼...

private boolean getVisibility(){
  visibilityPreference = context.getSharedPreferences(visibilityPreferenceName, Context.MODE_PRIVATE);
  return visibilityPreference .getBoolean(visibilityKey, false); //we set false as default value
}

ps:由於您是 android 新手,我可能應該提到,如果您處於獨立活動中,我可能應該提到,而不是上面提到的代碼中的context ,您不需要使用上下文,只需放置this或什么都不放置,並且您不在獨立活動中,以防萬一片段使用contextrequireActivity()並且如果在recyclerview 中使用傳遞的context

希望對你有幫助 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM