[英]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
或什么都不放置,並且您不在獨立活動中,以防萬一片段使用context
或requireActivity()
並且如果在recyclerview 中使用傳遞的context
。
希望對你有幫助 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.