mirror of
https://github.com/lacerta-doc/Lacerta.git
synced 2024-11-26 09:43:15 +00:00
WIp
This commit is contained in:
parent
37a18704e3
commit
1105c17fca
|
@ -5,6 +5,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.fragment.NavHostFragment;
|
import androidx.navigation.fragment.NavHostFragment;
|
||||||
import androidx.navigation.ui.NavigationUI;
|
import androidx.navigation.ui.NavigationUI;
|
||||||
|
@ -110,4 +111,47 @@ public class MainActivity extends AppCompatActivity implements FragmentNavigatio
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void navigateToFragment(Fragment fragment, boolean addToBackStack, boolean clearBackStack) {
|
||||||
|
if (clearBackStack) {
|
||||||
|
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||||
|
}
|
||||||
|
if (addToBackStack) {
|
||||||
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.replace(R.id.nav_host_fragment, fragment)
|
||||||
|
.addToBackStack(null)
|
||||||
|
.commit();
|
||||||
|
} else {
|
||||||
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.replace(R.id.nav_host_fragment, fragment)
|
||||||
|
.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void navigateToFragmentAlternate(Fragment fragment, boolean addToBackStack) {
|
||||||
|
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||||
|
|
||||||
|
// get the current fragment
|
||||||
|
Fragment currentFragment = getSupportFragmentManager().getPrimaryNavigationFragment();
|
||||||
|
|
||||||
|
// hide the current fragment
|
||||||
|
if (currentFragment != null) {
|
||||||
|
transaction.hide(currentFragment);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the new fragment
|
||||||
|
transaction.add(R.id.nav_host_fragment, fragment);
|
||||||
|
|
||||||
|
// Add the transaction to the back stack if needed
|
||||||
|
if (addToBackStack) {
|
||||||
|
transaction.addToBackStack(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit the transaction
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
|
// Update the primary navigation fragment
|
||||||
|
getSupportFragmentManager().beginTransaction().setPrimaryNavigationFragment(fragment).commit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,16 @@ public class LibraryPageFragment extends Fragment {
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LibraryPageFragment newInstance(String folderId) { // Back action
|
||||||
|
LibraryPageFragment fragment = new LibraryPageFragment();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString("folderId", folderId);
|
||||||
|
args.putString("title", null);
|
||||||
|
args.putString("publicPath", null);
|
||||||
|
fragment.setArguments(args);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
public static LibraryPageFragment newInstance() {
|
public static LibraryPageFragment newInstance() {
|
||||||
LibraryPageFragment fragment = new LibraryPageFragment();
|
LibraryPageFragment fragment = new LibraryPageFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
@ -127,11 +137,13 @@ public class LibraryPageFragment extends Fragment {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
if (getArguments() != null) {
|
if (getArguments() != null) {
|
||||||
this.folderId = getArguments().getString("folderId");
|
this.folderId = getArguments().getString("folderId"); // Required
|
||||||
this.title = getArguments().getString("title");
|
if (getArguments().getString("title") == null && getArguments().getString("publicPath") == null) {
|
||||||
this.parentId = getArguments().getString("parentId");
|
this.libraryItemPage = new LibraryItemPage();
|
||||||
// Log
|
} else {
|
||||||
logger.debug("LibraryTopFragment", "Args: folderId: " + folderId + ", title: " + title + ", parentId: " + parentId);
|
this.title = getArguments().getString("title");
|
||||||
|
this.parentId = getArguments().getString("publicPath");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.debug("LibraryTopFragment", "getArguments() is null(maybe root)");
|
logger.debug("LibraryTopFragment", "getArguments() is null(maybe root)");
|
||||||
this.libraryItemPage = new LibraryItemPage();
|
this.libraryItemPage = new LibraryItemPage();
|
||||||
|
@ -150,7 +162,7 @@ public class LibraryPageFragment extends Fragment {
|
||||||
// 画面遷移
|
// 画面遷移
|
||||||
FragmentNavigation fragmentNavigation = (FragmentNavigation) getActivity();
|
FragmentNavigation fragmentNavigation = (FragmentNavigation) getActivity();
|
||||||
// folderId: 推移先で表示するフォルダのID, folderName: 推移先で表示するフォルダの名前, parentId: このフラグメントで表示しているフォルダのID(推移先の親)
|
// folderId: 推移先で表示するフォルダのID, folderName: 推移先で表示するフォルダの名前, parentId: このフラグメントで表示しているフォルダのID(推移先の親)
|
||||||
fragmentNavigation.navigateToFragment(LibraryPageFragment.newInstance(folderId, folderName, libraryItemPage != null ? libraryItemPage.getParentId() : null));
|
fragmentNavigation.navigateToFragment(LibraryPageFragment.newInstance(folderId, folderName, libraryItemPage != null ? libraryItemPage.getParentId() : null), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -165,6 +177,16 @@ public class LibraryPageFragment extends Fragment {
|
||||||
// Get library page and update RecyclerView items
|
// Get library page and update RecyclerView items
|
||||||
lacertaLibrary.getLibraryPage(this.folderId, 10).thenAccept(libraryItemPage -> {
|
lacertaLibrary.getLibraryPage(this.folderId, 10).thenAccept(libraryItemPage -> {
|
||||||
this.libraryItemPage = libraryItemPage;
|
this.libraryItemPage = libraryItemPage;
|
||||||
|
|
||||||
|
if (this.parentId == null) {
|
||||||
|
this.parentId = libraryItemPage.getParentId();
|
||||||
|
}
|
||||||
|
if (this.title == null) {
|
||||||
|
this.title = libraryItemPage.getPageTitle();
|
||||||
|
// Toolbar init again
|
||||||
|
toolbarSetup(view.findViewById(R.id.library_toolbar), this.folderId != null, this.title != null ? this.title : "ライブラリ");
|
||||||
|
}
|
||||||
|
|
||||||
logger.debug("LibraryTopFragment", "Item selected! Total item page: " + this.libraryItemPage.getListItems().size());
|
logger.debug("LibraryTopFragment", "Item selected! Total item page: " + this.libraryItemPage.getListItems().size());
|
||||||
getActivity().runOnUiThread(() -> { // TODO-rca: 実行条件を考える?
|
getActivity().runOnUiThread(() -> { // TODO-rca: 実行条件を考える?
|
||||||
listItemAdapter.notifyItemRangeRemoved(0, this.libraryItemPage.getListItems().size() - 1);
|
listItemAdapter.notifyItemRangeRemoved(0, this.libraryItemPage.getListItems().size() - 1);
|
||||||
|
@ -228,8 +250,8 @@ public class LibraryPageFragment extends Fragment {
|
||||||
if (showBackButton) {
|
if (showBackButton) {
|
||||||
toolbar.setNavigationIcon(one.nem.lacerta.shared.ui.R.drawable.arrow_back_24px);
|
toolbar.setNavigationIcon(one.nem.lacerta.shared.ui.R.drawable.arrow_back_24px);
|
||||||
toolbar.setNavigationOnClickListener(v -> {
|
toolbar.setNavigationOnClickListener(v -> {
|
||||||
this.libraryItemPage = lacertaLibrary.getLibraryPage(this.libraryItemPage.getParentId(), 10).join();
|
//this.libraryItemPage = lacertaLibrary.getLibraryPage(this.libraryItemPage.getParentId(), 10).join();
|
||||||
getParentFragmentManager().popBackStack();
|
processBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
toolbar.setNavigationIcon(null);
|
toolbar.setNavigationIcon(null);
|
||||||
|
@ -247,4 +269,17 @@ public class LibraryPageFragment extends Fragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backボタンが押された時の処理
|
||||||
|
*/
|
||||||
|
private void processBack() {
|
||||||
|
if (this.parentId != null) {
|
||||||
|
FragmentNavigation fragmentNavigation = (FragmentNavigation) getActivity();
|
||||||
|
fragmentNavigation.navigateToFragment(LibraryPageFragment.newInstance(this.parentId));
|
||||||
|
} else { // Root
|
||||||
|
FragmentNavigation fragmentNavigation = (FragmentNavigation) getActivity();
|
||||||
|
fragmentNavigation.navigateToFragment(LibraryPageFragment.newInstance());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,8 @@ public interface FragmentNavigation {
|
||||||
void navigateToFragment(Fragment fragment);
|
void navigateToFragment(Fragment fragment);
|
||||||
|
|
||||||
void navigateToFragment(Fragment fragment, boolean addToBackStack);
|
void navigateToFragment(Fragment fragment, boolean addToBackStack);
|
||||||
|
|
||||||
|
void navigateToFragment(Fragment fragment, boolean addToBackStack, boolean clearBackStack);
|
||||||
|
|
||||||
|
void navigateToFragmentAlternate(Fragment fragment, boolean addToBackStack);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user