Действие по щелчку панели навигации Android Studio (Java) не работает должным образом ⇐ Android
-
Гость
Действие по щелчку панели навигации Android Studio (Java) не работает должным образом
index.xml
nav_header.xml
nav_drawer.xml
index_activity.java
package com.example.testagain; import static android.app.ProgressDialog.show; import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.navigation.NavigationView; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class index_activity extends AppCompatActivity { FirebaseAuth auth; FirebaseUser user; FloatingActionButton fab; BottomNavigationView bottomNavigationView; FragmentManager fragmentManager; DrawerLayout drawerLayout; ImageView menu; LinearLayout home,settings,achievement,logout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.index); //check login auth=FirebaseAuth.getInstance(); user=auth.getCurrentUser(); //bottom navigation bar bottomNavigationView = findViewById(R.id.bottomNavigationView); fab = findViewById(R.id.fab); //navigation drawer drawerLayout = findViewById(R.id.drawer_layout); menu = findViewById(R.id.menu); home= findViewById(R.id.bottom_home); settings = findViewById(R.id.action4); logout = findViewById(R.id.logout); achievement=findViewById(R.id.action3); menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (drawerLayout.isDrawerOpen(GravityCompat.START)) { closeDrawer(drawerLayout); } else { openDrawer(drawerLayout); } } }); home.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click home", Toast.LENGTH_SHORT).show(); recreate(); } }); settings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click settings", Toast.LENGTH_SHORT).show(); redirectActivity(index_activity.this,com.example.testagain.settings.class); } }); achievement.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click achievement", Toast.LENGTH_SHORT).show(); redirectActivity(index_activity.this,com.example.testagain.achievement.class); } }); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click logout", Toast.LENGTH_SHORT).show(); FirebaseAuth.getInstance().signOut(); Intent intent = new Intent(getApplicationContext(),login.class); startActivity(intent); finish(); } }); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showBottomDialog(); } }); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if(itemId == R.id.bottom_home){ openFragment(new HomeFragment()); } else if(itemId == R.id.distract){ openFragment(new PlanningFragment()); }else if(itemId == R.id.action3){ openFragment(new AchievementFragment()); }else if(itemId == R.id.action4){ openFragment(new SettingsFragment()); } //drawerLayout.closeDrawer(GravityCompat.START); return true; } }); } public static void openDrawer(DrawerLayout drawerLayout){ drawerLayout.openDrawer(GravityCompat.START); } public static void closeDrawer(DrawerLayout drawerLayout){ if(drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); } } public static void redirectActivity(Activity activity,Class secondActivity){ Intent intent = new Intent(activity,secondActivity); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(intent); activity.finish(); } @Override protected void onPause(){ super.onPause(); closeDrawer(drawerLayout); } private void openFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frame_layout, fragment); fragmentTransaction.commit(); } private void showBottomDialog() { final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.bottomsheetlayout); LinearLayout videoLayout = dialog.findViewById(R.id.layoutVideo); LinearLayout shortsLayout = dialog.findViewById(R.id.layoutShorts); ImageView cancelButton = dialog.findViewById(R.id.cancelButton); videoLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(getApplicationContext(),"Upload a Video is clicked",Toast.LENGTH_SHORT).show(); } }); shortsLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(getApplicationContext(),"Create a short is Clicked",Toast.LENGTH_SHORT).show(); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; dialog.getWindow().setGravity(Gravity.BOTTOM); } } on my index.xml, I can click on bottom navigation and it works. But at my navigation drawer, I can open the drawer but the option to click is not working. I have check the java code and it works by moving the on index.xml outside the relativelayout. But if I do that, the drawer could not be closed and always open. So I think is the xml position problem, but I can't found out what problem is.
Источник: https://stackoverflow.com/questions/780 ... -as-expect
index.xml
nav_header.xml
nav_drawer.xml
index_activity.java
package com.example.testagain; import static android.app.ProgressDialog.show; import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.navigation.NavigationView; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class index_activity extends AppCompatActivity { FirebaseAuth auth; FirebaseUser user; FloatingActionButton fab; BottomNavigationView bottomNavigationView; FragmentManager fragmentManager; DrawerLayout drawerLayout; ImageView menu; LinearLayout home,settings,achievement,logout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.index); //check login auth=FirebaseAuth.getInstance(); user=auth.getCurrentUser(); //bottom navigation bar bottomNavigationView = findViewById(R.id.bottomNavigationView); fab = findViewById(R.id.fab); //navigation drawer drawerLayout = findViewById(R.id.drawer_layout); menu = findViewById(R.id.menu); home= findViewById(R.id.bottom_home); settings = findViewById(R.id.action4); logout = findViewById(R.id.logout); achievement=findViewById(R.id.action3); menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (drawerLayout.isDrawerOpen(GravityCompat.START)) { closeDrawer(drawerLayout); } else { openDrawer(drawerLayout); } } }); home.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click home", Toast.LENGTH_SHORT).show(); recreate(); } }); settings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click settings", Toast.LENGTH_SHORT).show(); redirectActivity(index_activity.this,com.example.testagain.settings.class); } }); achievement.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click achievement", Toast.LENGTH_SHORT).show(); redirectActivity(index_activity.this,com.example.testagain.achievement.class); } }); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(index_activity.this, "you click logout", Toast.LENGTH_SHORT).show(); FirebaseAuth.getInstance().signOut(); Intent intent = new Intent(getApplicationContext(),login.class); startActivity(intent); finish(); } }); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showBottomDialog(); } }); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if(itemId == R.id.bottom_home){ openFragment(new HomeFragment()); } else if(itemId == R.id.distract){ openFragment(new PlanningFragment()); }else if(itemId == R.id.action3){ openFragment(new AchievementFragment()); }else if(itemId == R.id.action4){ openFragment(new SettingsFragment()); } //drawerLayout.closeDrawer(GravityCompat.START); return true; } }); } public static void openDrawer(DrawerLayout drawerLayout){ drawerLayout.openDrawer(GravityCompat.START); } public static void closeDrawer(DrawerLayout drawerLayout){ if(drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); } } public static void redirectActivity(Activity activity,Class secondActivity){ Intent intent = new Intent(activity,secondActivity); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(intent); activity.finish(); } @Override protected void onPause(){ super.onPause(); closeDrawer(drawerLayout); } private void openFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frame_layout, fragment); fragmentTransaction.commit(); } private void showBottomDialog() { final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.bottomsheetlayout); LinearLayout videoLayout = dialog.findViewById(R.id.layoutVideo); LinearLayout shortsLayout = dialog.findViewById(R.id.layoutShorts); ImageView cancelButton = dialog.findViewById(R.id.cancelButton); videoLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(getApplicationContext(),"Upload a Video is clicked",Toast.LENGTH_SHORT).show(); } }); shortsLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(getApplicationContext(),"Create a short is Clicked",Toast.LENGTH_SHORT).show(); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; dialog.getWindow().setGravity(Gravity.BOTTOM); } } on my index.xml, I can click on bottom navigation and it works. But at my navigation drawer, I can open the drawer but the option to click is not working. I have check the java code and it works by moving the on index.xml outside the relativelayout. But if I do that, the drawer could not be closed and always open. So I think is the xml position problem, but I can't found out what problem is.
Источник: https://stackoverflow.com/questions/780 ... -as-expect
Мобильная версия