从我开始学习 android studio 到现在才几天,今天是我偶然发现碎片的一天。我正在使用 beginTransaction.replace() 方法来替换片段,但这只是每次都创建一个新片段。我已经实现了一个底部导航视图,其中包含菜单中每个相应项目的片段。这是我的代码:
package com.example.application;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class Application extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application);
BottomNavigationView bottomNav = findViewById(R.id.bottomNavigationView);
bottomNav.setOnNavigationItemSelectedListener(navListener);
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.firstPage:
selectedFragment = new firstFragment();
break;
case R.id.secondPage:
selectedFragment = new secondFragment();
break;
case R.id.thirdPage:
selectedFragment = new thirdFragment();
break;
case R.id.fourthPage:
selectedFragment = new fourthFragment();
break;
case R.id.fifthPage:
selectedFragment = new fifthFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();
return true;
}
};
}
replace() 方法不好,因为我需要为每个片段保存状态。我不想使用 onSaveInstanceState 方法来保存状态,因为它们只是令人沮丧。我需要的是替换代码:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();
用隐藏和显示替换替换方法。我需要隐藏最后选择的片段并显示当前选择的片段。如何做到这一点?
而且我还想知道 Facebook、Instagram 等大型应用程序如何保持它们的状态,即使用户向下滚动数千个帖子。希望你能回答。问候。