diff --git a/app/build.gradle b/app/build.gradle index e8a2bae..cc07415 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,6 +25,12 @@ android { } dependencies { + + def nav_version = "2.1.0" + + implementation "androidx.navigation:navigation-fragment:$nav_version" + implementation "androidx.navigation:navigation-ui:$nav_version" + implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.annotation:annotation:1.1.0' implementation 'com.google.android.material:material:1.1.0' diff --git a/app/src/main/java/io/anycopy/googleplusdemo/MainActivity.java b/app/src/main/java/io/anycopy/googleplusdemo/MainActivity.java index 4233361..5244405 100644 --- a/app/src/main/java/io/anycopy/googleplusdemo/MainActivity.java +++ b/app/src/main/java/io/anycopy/googleplusdemo/MainActivity.java @@ -1,175 +1,18 @@ package io.anycopy.googleplusdemo; import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.view.GravityCompat; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; - -import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.android.material.navigation.NavigationView; -import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { - private ViewPager viewPager; - private BottomNavigationView navigation; - private Toolbar toolbar; - private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener - = new BottomNavigationView.OnNavigationItemSelectedListener() { - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - toolbar.setTitle(item.getTitle()); - switch (item.getItemId()) { - case R.id.navigation_home: - viewPager.setCurrentItem(0); - return true; - case R.id.navigation_dashboard: - viewPager.setCurrentItem(1); - return true; - case R.id.navigation_notifications: - viewPager.setCurrentItem(2); - return true; - } - return false; - } - }; - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.snack_bar, menu); - return super.onCreateOptionsMenu(menu); - } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_show_snack_bar: - showSnackBar(); - return true; - default: - return super.onOptionsItemSelected(item); - } - - } - - private void showSnackBar() { - Snackbar.make(navigation, "Some text", Snackbar.LENGTH_LONG).show(); - - } - - @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - viewPager = findViewById(R.id.view_pager); - GooglePlusFragmentPageAdapter adapter = new GooglePlusFragmentPageAdapter(getSupportFragmentManager()); - viewPager.setAdapter(adapter); - viewPager.setOffscreenPageLimit(adapter.getCount() - 1); - navigation = findViewById(R.id.navigation); - navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - bindNavigationDrawer(); - initTitle(); - } - - private void initTitle() { - toolbar.post(() -> toolbar.setTitle(navigation.getMenu().getItem(0).getTitle())); - } - - private void bindNavigationDrawer() { - - - DrawerLayout drawer = findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.addDrawerListener(toggle); - toggle.syncState(); - - NavigationView navigationView = findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - // Handle navigation view item clicks here. - int id = item.getItemId(); - if (id == R.id.nav_tool) { - showToolSnackBar(); - } else if (id == R.id.nav_share) { - showShareSnackBar(); - } else if (id == R.id.nav_gallery) { - showGallerySnackBar(); - } else if (id == R.id.nav_send) { - showSendSnackBar(); - } - DrawerLayout drawer = findViewById(R.id.drawer_layout); - drawer.closeDrawer(GravityCompat.START); - return true; - } - - - }); - } - - private void showSendSnackBar() { - Snackbar.make(navigation, "Send", Snackbar.LENGTH_SHORT).show(); - - } - - private void showGallerySnackBar() { - Snackbar.make(navigation, "Gallery", Snackbar.LENGTH_SHORT).show(); - - } - - private void showToolSnackBar() { - Snackbar.make(navigation, "Tool", Snackbar.LENGTH_SHORT).show(); - } - - private void showShareSnackBar() { - Snackbar.make(navigation, "Share", Snackbar.LENGTH_SHORT).show(); - } - - public void onFabClicked(View view) { - showShareSnackBar(); - } - - - private static class GooglePlusFragmentPageAdapter extends FragmentPagerAdapter { - - - public GooglePlusFragmentPageAdapter(FragmentManager fm) { - super(fm); - } - - @NonNull - @Override - public Fragment getItem(int position) { - switch (position) { - case 0: - return HomeFragment.newInstance(1); - case 1: - return DashboardFragment.newInstance("Tony"); - case 2: - return NotificationFragment.newInstance(); - default: - throw new RuntimeException("Not supported"); - } - } - - @Override - public int getCount() { - return 3; - } + getSupportFragmentManager().beginTransaction() + .replace(R.id.fl_layout, new MainFragment()) + .commitNow(); } } diff --git a/app/src/main/java/io/anycopy/googleplusdemo/MainFragment.java b/app/src/main/java/io/anycopy/googleplusdemo/MainFragment.java new file mode 100644 index 0000000..bee63b5 --- /dev/null +++ b/app/src/main/java/io/anycopy/googleplusdemo/MainFragment.java @@ -0,0 +1,187 @@ +package io.anycopy.googleplusdemo; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.widget.Toolbar; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.navigation.NavigationView; +import com.google.android.material.snackbar.Snackbar; + +public class MainFragment extends Fragment implements BottomNavigationView.OnNavigationItemSelectedListener { + + private ViewPager viewPager; + private BottomNavigationView navigation; + private Toolbar toolbar; + + private DrawerLayout drawer; + private NavigationView navigationView; + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.snack_bar, menu); + } + + @SuppressWarnings("SwitchStatementWithTooFewBranches") + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_show_snack_bar: + showSnackBar(); + return true; + default: + return super.onOptionsItemSelected(item); + } + + } + + private void showSnackBar() { + Snackbar.make(navigation, "Some text", Snackbar.LENGTH_LONG).show(); + + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_main, container, false); + } + + @Override + public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) { + super.onViewCreated(rootView, savedInstanceState); + toolbar = rootView.findViewById(R.id.toolbar); + viewPager = rootView.findViewById(R.id.view_pager); + drawer = rootView.findViewById(R.id.drawer_layout); + navigationView = rootView.findViewById(R.id.nav_view); + drawer = rootView.findViewById(R.id.drawer_layout); + rootView.findViewById(R.id.floating_action_button).setOnClickListener(view -> onFabClicked()); + GooglePlusFragmentPageAdapter adapter = new GooglePlusFragmentPageAdapter(getChildFragmentManager()); + viewPager.setAdapter(adapter); + viewPager.setOffscreenPageLimit(adapter.getCount() - 1); + navigation = rootView.findViewById(R.id.navigation); + navigation.setOnNavigationItemSelectedListener(this); + bindNavigationDrawer(); + initTitle(); + } + + + private void initTitle() { + toolbar.setTitle(navigation.getMenu().getItem(0).getTitle()); + } + + private void bindNavigationDrawer() { + + + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + requireActivity(), drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + + navigationView.setNavigationItemSelectedListener(item -> { + // Handle navigation rootView item clicks here. + int id = item.getItemId(); + if (id == R.id.nav_tool) { + showToolSnackBar(); + } else if (id == R.id.nav_share) { + showShareSnackBar(); + } else if (id == R.id.nav_gallery) { + showGallerySnackBar(); + } else if (id == R.id.nav_send) { + showSendSnackBar(); + } + drawer.closeDrawer(GravityCompat.START); + return true; + }); + } + + private void showSendSnackBar() { + Snackbar.make(navigation, "Send", Snackbar.LENGTH_SHORT).show(); + + } + + private void showGallerySnackBar() { + Snackbar.make(navigation, "Gallery", Snackbar.LENGTH_SHORT).show(); + + } + + private void showToolSnackBar() { + Snackbar.make(navigation, "Tool", Snackbar.LENGTH_SHORT).show(); + } + + private void showShareSnackBar() { + Snackbar.make(navigation, "Share", Snackbar.LENGTH_SHORT).show(); + } + + public void onFabClicked() { + showShareSnackBar(); + } + + + private static class GooglePlusFragmentPageAdapter extends FragmentPagerAdapter { + + + public GooglePlusFragmentPageAdapter(FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(int position) { + switch (position) { + case 0: + return HomeFragment.newInstance(1); + case 1: + return DashboardFragment.newInstance("Tony"); + case 2: + return NotificationFragment.newInstance(); + default: + throw new RuntimeException("Not supported"); + } + } + + @Override + public int getCount() { + return 3; + } + } + + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + toolbar.setTitle(item.getTitle()); + switch (item.getItemId()) { + case R.id.navigation_home: + viewPager.setCurrentItem(0); + return true; + case R.id.navigation_dashboard: + viewPager.setCurrentItem(1); + return true; + case R.id.navigation_notifications: + viewPager.setCurrentItem(2); + return true; + } + return false; + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8b74c77..76021fe 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,74 +1,9 @@ - + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..3d3b576 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml new file mode 100644 index 0000000..c8384f7 --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file