android - 如何在 Android Studio 中的 Fragment 中实现 onback press
问题描述
我希望每当用户按下任何片段时,用户都会进入主要活动。
MainActivity.java
package com.thechamp.ait;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.accessibility.AccessibilityRecord;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import com.google.android.material.navigation.NavigationView;
import java.security.MessageDigest;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawerLayout;
private NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(null);
getSupportActionBar().setElevation(0);
navigationView = findViewById(R.id.nav_view);
navigationView.setItemIconTintList(null);
Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
if(timeOfDay >= 0 && timeOfDay < 12){
Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show();
}else if(timeOfDay >= 12 && timeOfDay < 16){
Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show();
}else if(timeOfDay >= 16 && timeOfDay < 21){
Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show();
}else if(timeOfDay >= 21 && timeOfDay < 24){
Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show();
}
drawerLayout = findViewById(R.id.drawer_layout);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
}
@Override
public boolean onNavigationItemSelected( MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_about:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutCollege()).commit();
break;
case R.id.nav_Earnmoney:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new EarnMoney()).commit();
break;
case R.id.nav_Feedback:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Feedback()).commit();
break;
case R.id.nav_notice:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NoticeBoard()).commit();
break;
case R.id.nav_study:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StudyMaterial()).commit();
break;
case R.id.nav_support:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Support()).commit();
break;
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
}
else {
super.onBackPressed();
}
}}
在这里反馈片段代码 - 我希望每当用户按下后退按钮时用户移动到主要活动。
package com.thechamp.ait;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
public class Feedback extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_feedback, container, false);
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
return view;
}
}
解决方案
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.onBackPressedDispatcher?.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if(shouldInterceptBackPress()){
// your logic when backpress is clicked
}else{
isEnabled = false
main.activity?.onBackPressed()
}
}
})
}
推荐阅读
- ios - iOS 迅捷 | 没有得到最新的变量值
- r - 使用 ggmap 和 googleAuthR 在 R 图中使用地图的注册
- c - 为什么添加链接器标志 `-save-temps` 可以解决 clang-8 错误:“无法制作临时文件”?
- wpf - WPF RichTextBox中修改后如何保持Run一起
- python - Amazon-ses -错误:554,b'Message 被拒绝:电子邮件地址未验证?
- pip - Pip 为使用 Poetry 构建的库安装了不必要的冲突依赖项
- tensorflow - 对象没有属性 '_compile_metrics',即使 metric = ['accuracy']
- php - 使用 PHP 将字符串解析为 CSV
- php - 如何从一个表中的php laravel中的两个表中获取多个值?
- android - 卡在 Gradle 上:在 android studio 中下载 maven-metadata.xml