在這個應用程式上,當我嘗試從"HomeFragment"到"DetailsActivity"然后按回時,它又回到了同一個片段,而且點擊時的漢堡包圖示也不起作用

導航圖
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/mobile_navigation"
app:startDestination="@id/nav_home">
<fragment
android:id="@ id/nav_home"
android:name="com.blogspot.abtallaldigital.ui.home.HomeFragment"
android:label="@string/home"
tools:layout="@layout/fragment_home"/>
<fragment
android:id="@ id/nav_Accessory"
android:name="com.blogspot.abtallaldigital.ui.accessory.AccessoryFragment"
android:label="@string/accessory"
tools:layout="@layout/fragment_accessory" />
<fragment
android:id="@ id/nav_Arcade"
android:name="com.blogspot.abtallaldigital.ui.arcade.ArcadeFragment"
android:label="@string/arcade"
tools:layout="@layout/fragment_arcade" />
<fragment
android:id="@ id/nav_Fashion"
android:name="com.blogspot.abtallaldigital.ui.fashion.FashionFragment"
android:label="@string/fashion"
tools:layout="@layout/fashion_fragment" />
<fragment
android:id="@ id/nav_Food"
android:name="com.blogspot.abtallaldigital.ui.food.FoodFragment"
android:label="@string/food"
tools:layout="@layout/food_fragment" />
<fragment
android:id="@ id/nav_Heath"
android:name="com.blogspot.abtallaldigital.ui.heath.HeathFragment"
android:label="@string/heath"
tools:layout="@layout/heath_fragment" />
<fragment
android:id="@ id/nav_Lifestyle"
android:name="com.blogspot.abtallaldigital.ui.lifestyle.LifestyleFragment"
android:label="@string/lifestyle"
tools:layout="@layout/lifestyle_fragment" />
<fragment
android:id="@ id/nav_Sports"
android:name="com.blogspot.abtallaldigital.ui.sports.SportsFragment"
android:label="@string/sports"
tools:layout="@layout/sports_fragment" />
<dialog
android:id="@ id/about"
android:name="com.blogspot.abtallaldigital.ui.about.AboutFragment"
android:label="about"
tools:layout="@layout/about" />
<activity
android:id="@ id/detailsActivity"
android:name="com.blogspot.abtallaldigital.ui.DetailsActivity"
android:label="activity_details"
tools:layout="@layout/activity_details" />
</navigation>
HomeFragment導航代碼
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.homeRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(requireContext(),
binding.homeRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Item item = itemArrayList.get(position);
bundle.putParcelable("item",item);
Navigation.findNavController(requireView())
.navigate(R.id.detailsActivity, bundle,
new NavOptions.Builder()
.setPopUpTo(R.id.nav_home, true).build()
);
}
@Override
public void onLongItemClick(View view, int position) {
}
}
));
}
詳情活動
@AndroidEntryPoint
public class DetailsActivity extends AppCompatActivity {
private static final String TAG = "DetailsActivity";
private ActivityDetailsBinding binding;
String url, title, content, youtubeThumbnailImageSrc, youTubeLink;
int youtubeThumbnailImageSetVisibility;
private PostViewModel postViewModel;
private Item postItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityDetailsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
postViewModel = new ViewModelProvider(this).get(PostViewModel.class);
postItem = getIntent().getParcelableExtra("item");
if (postItem != null) {
Log.d(TAG, "onItemClick: item" postItem.getTitle());
final Document document = Jsoup.parse(postItem.getContent());
// final Elements elements = document.select("img");
Element element = document.body();
for (Element e : element.getElementsByClass
("YOUTUBE-iframe-video")) {
youtubeThumbnailImageSrc = e.attr("data-thumbnail-src");
youTubeLink = e.attr("src");
Log.e("YouTube thumbnail", youtubeThumbnailImageSrc);
Log.e("Youtube link", youTubeLink);
}
if (youtubeThumbnailImageSrc == null) {
youtubeThumbnailImageSetVisibility = 8;
}
url = postItem.getUrl();
title = postItem.getTitle();
content = postItem.getContent();
}
// blogImage = (ImageView) findViewById(R.id.blogImage);
setSupportActionBar(binding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
binding.progressBar.setVisibility(View.VISIBLE);
binding.titleTextView.setText(title);
binding.blogContent.setMovementMethod(LinkMovementMethod.getInstance());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
binding.fab.bringToFront();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
binding.scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
// Log.d("ScrollView","scrollX_" scrollX "_scrollY_" scrollY "_oldScrollX_" oldScrollX "_oldScrollY_" oldScrollY);
if (scrollY > 0 && binding.fab.isShown()) {
binding.fab.hide();
} else if (scrollY < 22) {
binding.fab.show();
}
});
} else {
binding.scrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
int mScrollY = binding.scrollView.getScrollY();
if (mScrollY > 0 && binding.fab.isShown()) {
binding.fab.hide();
} else if (mScrollY < 22) {
binding.fab.show();
}
});
}
binding.fab.setOnClickListener(view -> {
String shareContent = title "\n" url;
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, shareContent);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
try {
startActivity(Intent.createChooser(shareIntent, title));
} catch (Exception exception) {
Log.e(TAG, "onCreate: " exception);
}
});
// String imageSrc = getIntent().getStringExtra("blogImage");
// Glide.with(getApplicationContext()).load(imageSrc).into(blogImage);
binding.youtubeThumbnailImage.setVisibility(youtubeThumbnailImageSetVisibility);
binding.youtubeThumbnailImage.setAdjustViewBounds(true);
Picasso.get().load(youtubeThumbnailImageSrc).into(binding.youtubeThumbnailImage);
binding.youtubeThumbnailImage.setOnClickListener(view -> {
Intent youTube = new Intent
(Intent.ACTION_VIEW, Uri.parse(youTubeLink));
startActivity(youTube);
});
PicassoImageGetter imageGetter = new PicassoImageGetter(binding.blogContent, this);
Spannable html;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
html = (Spannable) Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY, imageGetter, null);
} else {
html = (Spannable) Html.fromHtml(content, imageGetter, null);
}
binding.blogContent.setText(html);
binding.visitSite.setOnClickListener(view -> openCustomTab(this, Uri.parse(url)));
binding.progressBar.setVisibility(View.GONE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_details_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_add_to_favorites) {
saveTogFavorites(item);
} else if (item.getItemId() == R.id.action_share) {
ShareActionProvider shareActionProvider =
(ShareActionProvider) MenuItemCompat.getActionProvider(item);
shareActionProvider.setShareIntent(createShareIntent());
return true;
} else if (item.getItemId() == R.id.copyTheLink) {
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("link", url);
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(this, getString(R.string.linkCopied), Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(item);
}
private void saveTogFavorites(MenuItem menuItem) {
// Bundle bundle = getIntent().getParcelableExtra("postList");
FavoritesEntity favoritesEntity = new FavoritesEntity(0,
postItem);
postViewModel.insertFavorites(favoritesEntity);
menuItem.setIcon(R.drawable.ic_favorite);
Snackbar.make(binding.getRoot(), "Saved", Snackbar.LENGTH_LONG).show();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
主要活動
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@SuppressWarnings("unused")
private AppBarConfiguration mAppBarConfiguration;
public static Utils.DataStoreRepository DATA_STORE_REPOSITORY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
DATA_STORE_REPOSITORY = new Utils.DataStoreRepository(this);
setSupportActionBar(binding.appBarMain.toolbar);
mAppBarConfiguration = new AppBarConfiguration.Builder(R.id.nav_home, R.id.nav_Accessory,
R.id.nav_Arcade, R.id.nav_Fashion,
R.id.nav_Food, R.id.nav_Heath,
R.id.nav_Lifestyle, R.id.nav_Sports, R.id.about)
.setOpenableLayout(binding.drawerLayout)
.build();
NavHostFragment navHostFragment = (NavHostFragment)
getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
assert navHostFragment != null;
NavController navController = navHostFragment.getNavController();
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}
在尋找這個問題的解決方案時,我看到了類似的問題,我使用 viewModel with MutableLiveDatabut not to handle the events
uj5u.com熱心網友回復:
為什么要創建另一個 Activity?
導航組件的默認行為是使用一個 Activity 和多個 Fragment。
您應該創建一個配接器來在專案上顯示這些資料,然后在 ItemClickListener 介面上實作以將選定的專案從配接器單擊到 HomeFragment。從 HomeFragment 您可以實作介面并將當前單擊的專案發送到 DetailsFragment 而不是 DetailsActivity(您必須更改),您可以使用引數發送它。
不要在導航組件中使用多個活動。
uj5u.com熱心網友回復:
試試這個解決方案
- 創建新片段
DetailsFragment并將您的代碼移動DetailsActivity到它,
不要覆寫onSupportNavigateUp
public class DetailsFragment extends Fragment {
private static final String TAG = "DetailsFragment";
private FragmentDetailsBinding binding;
String url, title, content, youtubeThumbnailImageSrc, youTubeLink;
int youtubeThumbnailImageSetVisibility;
private PostViewModel postViewModel;
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
postViewModel = new ViewModelProvider(this).get(PostViewModel.class);
Log.d(TAG, "onCreate checkSavedFavoritesItems: " postFavoritesSavedId);
postItem = DetailsFragmentArgs.fromBundle(getArguments()).getPostItem();
final Document document = Jsoup.parse(postItem.getContent());
// final Elements elements = document.select("img");
Element element = document.body();
for (Element e : element.getElementsByClass
("YOUTUBE-iframe-video")) {
youtubeThumbnailImageSrc = e.attr("data-thumbnail-src");
youTubeLink = e.attr("src");
Log.e("YouTube thumbnail", youtubeThumbnailImageSrc);
Log.e("Youtube link", youTubeLink);
}
if (youtubeThumbnailImageSrc == null) {
youtubeThumbnailImageSetVisibility = 8;
}
url = postItem.getUrl();
title = postItem.getTitle();
content = postItem.getContent();
// blogImage = (ImageView) findViewById(R.id.blogImage);
setHasOptionsMenu(true);
// Objects.requireNonNull(getSupportActionBar()).setDisplayShowTitleEnabled(false);
Objects.requireNonNull( ((MainActivity) requireActivity())
.getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setDisplayShowHomeEnabled(true);
binding.progressBar.setVisibility(View.VISIBLE);
binding.titleTextView.setText(title);
binding.blogContent.setMovementMethod(LinkMovementMethod.getInstance());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
binding.fab.bringToFront();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
binding.scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
// Log.d("ScrollView","scrollX_" scrollX "_scrollY_" scrollY "_oldScrollX_" oldScrollX "_oldScrollY_" oldScrollY);
if (scrollY > 0 && binding.fab.isShown()) {
binding.fab.hide();
} else if (scrollY < 22) {
binding.fab.show();
}
});
} else {
binding.scrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
int mScrollY = binding.scrollView.getScrollY();
if (mScrollY > 0 && binding.fab.isShown()) {
binding.fab.hide();
} else if (mScrollY < 22) {
binding.fab.show();
}
});
}
binding.fab.setOnClickListener(view2 -> {
String shareContent = title "\n" url;
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, shareContent);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
try {
startActivity(Intent.createChooser(shareIntent, title));
} catch (Exception exception) {
Log.e(TAG, "onCreate: " exception);
}
});
// String imageSrc = getIntent().getStringExtra("blogImage");
// Glide.with(getApplicationContext()).load(imageSrc).into(blogImage);
binding.youtubeThumbnailImage.setVisibility(youtubeThumbnailImageSetVisibility);
binding.youtubeThumbnailImage.setAdjustViewBounds(true);
Picasso.get().load(youtubeThumbnailImageSrc).into(binding.youtubeThumbnailImage);
binding.youtubeThumbnailImage.setOnClickListener(view1 -> {
Intent youTube = new Intent
(Intent.ACTION_VIEW, Uri.parse(youTubeLink));
startActivity(youTube);
});
PicassoImageGetter imageGetter = new PicassoImageGetter(binding.blogContent, requireContext());
Spannable html;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
html = (Spannable) Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY, imageGetter, null);
} else {
html = (Spannable) Html.fromHtml(content, imageGetter, null);
}
binding.blogContent.setText(html);
binding.visitSite.setOnClickListener(view3 -> openCustomTab(requireContext(), Uri.parse(url)));
binding.progressBar.setVisibility(View.GONE);
}
private Item postItem;
private boolean postFavoritesSaved = false;
private int postFavoritesSavedId = 0;
private MenuItem menuItem;
@Override
public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
binding = FragmentDetailsBinding.inflate(inflater, container, false);
return binding.getRoot();
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu,
@NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.activity_details_menu, menu);
menuItem = menu.findItem(R.id.action_add_to_favorites);
checkSavedFavoritesItems(menuItem);
}
@Override
public void onDestroyView() {
super.onDestroyView();
menuItem.setIcon(R.drawable.ic_favorite_border);
}
private void checkSavedFavoritesItems(MenuItem menuItem) {
postViewModel.getAllFavorites().observe(this, favoritesEntity -> {
try {
for (FavoritesEntity savedPost: favoritesEntity) {
if (savedPost.getItem().getId().equals(postItem.getId())) {
menuItem.setIcon(R.drawable.ic_favorite);
postFavoritesSavedId = savedPost.getId();
Log.d(TAG, "checkSavedFavoritesItems: " postFavoritesSavedId);
postFavoritesSaved = true;
}
}
} catch (Exception exception) {
Log.e(TAG, "checkSavedFavoritesItems: " exception.getMessage());
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_add_to_favorites && !postFavoritesSaved) {
saveTogFavorites(menuItem);
} else if (menuItem.getItemId() == R.id.action_add_to_favorites && postFavoritesSaved) {
removePostFromFavorites(menuItem);
} else if (menuItem.getItemId() == R.id.action_share) {
ShareActionProvider shareActionProvider =
(ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
shareActionProvider.setShareIntent(createShareIntent());
return true;
} else if (menuItem.getItemId() == R.id.copyTheLink) {
ClipboardManager clipboardManager = (ClipboardManager)
requireActivity().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("link", url);
assert clipboardManager != null;
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(requireContext(), getString(R.string.linkCopied), Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(menuItem);
}
private void saveTogFavorites(MenuItem menuItem) {
FavoritesEntity favoritesEntity = new FavoritesEntity(0,
postItem);
postViewModel.insertFavorites(favoritesEntity);
menuItem.setIcon(R.drawable.ic_favorite);
Snackbar.make(binding.getRoot(), "Saved", Snackbar.LENGTH_LONG).show();
postFavoritesSaved = true;
}
private void removePostFromFavorites(MenuItem menuItem) {
FavoritesEntity favoritesEntity = new FavoritesEntity(postFavoritesSavedId,
postItem);
Log.d(TAG, "checkSavedFavoritesItems: " postFavoritesSavedId);
postViewModel.deleteFavoritePost(favoritesEntity);
menuItem.setIcon(R.drawable.ic_favorite_border);
Snackbar.make(binding.getRoot(),
"Post deleted from favorites", Snackbar.LENGTH_LONG).show();
postFavoritesSaved = false;
}
- 添加
DetailsFragment到nav_graph和將其添加引數postItem作為Parcelable
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/mobile_navigation"
app:startDestination="@id/nav_home">
<fragment
android:id="@ id/nav_home"
android:name="com.blogspot.abtallaldigital.ui.home.HomeFragment"
android:label="@string/home"
tools:layout="@layout/fragment_home">
<action
android:id="@ id/action_nav_home_to_detailsFragment"
app:destination="@id/detailsFragment"
app:popUpTo="@id/nav_home" />
</fragment>
<fragment
android:id="@ id/nav_Accessory"
android:name="com.blogspot.abtallaldigital.ui.accessory.AccessoryFragment"
android:label="@string/accessory"
tools:layout="@layout/fragment_accessory" >
<action
android:id="@ id/action_nav_Accessory_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Arcade"
android:name="com.blogspot.abtallaldigital.ui.arcade.ArcadeFragment"
android:label="@string/arcade"
tools:layout="@layout/fragment_arcade" >
<action
android:id="@ id/action_nav_Arcade_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Fashion"
android:name="com.blogspot.abtallaldigital.ui.fashion.FashionFragment"
android:label="@string/fashion"
tools:layout="@layout/fashion_fragment" >
<action
android:id="@ id/action_nav_Fashion_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Food"
android:name="com.blogspot.abtallaldigital.ui.food.FoodFragment"
android:label="@string/food"
tools:layout="@layout/food_fragment" >
<action
android:id="@ id/action_nav_Food_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Heath"
android:name="com.blogspot.abtallaldigital.ui.heath.HeathFragment"
android:label="@string/heath"
tools:layout="@layout/heath_fragment" >
<action
android:id="@ id/action_nav_Heath_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Lifestyle"
android:name="com.blogspot.abtallaldigital.ui.lifestyle.LifestyleFragment"
android:label="@string/lifestyle"
tools:layout="@layout/lifestyle_fragment" >
<action
android:id="@ id/action_nav_Lifestyle_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@ id/nav_Sports"
android:name="com.blogspot.abtallaldigital.ui.sports.SportsFragment"
android:label="@string/sports"
tools:layout="@layout/sports_fragment" >
<action
android:id="@ id/action_nav_Sports_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<dialog
android:id="@ id/about"
android:name="com.blogspot.abtallaldigital.ui.about.AboutFragment"
android:label="about"
tools:layout="@layout/about" />
<fragment
android:id="@ id/detailsFragment"
android:name="com.blogspot.abtallaldigital.ui.DetailsFragment"
android:label="Post details"
tools:layout="@layout/fragment_details" >
<argument
android:name="postItem"
app:argType="com.blogspot.abtallaldigital.pojo.Item" />
</fragment>
</navigation>
- 最后在 HomeFragment 中撰寫導航代碼,并像這樣傳遞可打包的專案
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
navController = Navigation.findNavController(requireView());
binding.homeRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(requireContext(),
binding.homeRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Item item = itemArrayList.get(position);
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.nav_home) {
Navigation.findNavController(requireView())
.navigate(HomeFragmentDirections.actionNavHomeToDetailsFragment(item));
}
}
@Override
public void onLongItemClick(View view, int position) {
}
}
));
}
關于工具列問題,您可以選擇使用片段自定義工具列或使用應用程式主題工具列,但不能同時使用,請讓我知道靈魂是否有效
uj5u.com熱心網友回復:
您可以嘗試從片段管理器中洗掉片段,如下所示:
Fragment fragmentByTag = getFragmentManager().
findFragmentByTag("Old fragment tag");
if (fragmentByTag != null) {
getFragmentManager().beginTransaction()
.remove(fragmentByTag).commit();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324304.html
標籤:爪哇 安卓 android-fragments android-架构-导航 片段回栈
上一篇:遍歷MySQL表的兩列
下一篇:如何在片段內制作微調器?
