如何检测在fragment android中按下后退按钮的时间?

2024-04-13

我的项目带有带片段的导航抽屉,有 5 个菜单,问题是当我转到菜单 4 并按下后退按钮时,应用程序关闭,但我需要应用程序返回到第一个菜单,即片段中的所有菜单。

这是主要活动(导航抽屉)的代码

public class MainActivity extends AppCompatActivity{
DrawerLayout mDrawerLayout;
NavigationView mNavigationView;
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    /**
     *Setup the DrawerLayout and NavigationView
     */

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;

    /**
     * Lets inflate the very first fragment
     * Here , we are inflating the TabFragment as the first Fragment
     */

    mFragmentManager = getSupportFragmentManager();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.containerView,new Recommendation()).commit();
    /**
     * Setup click events on the Navigation View Items.
     */

    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            mDrawerLayout.closeDrawers();



            if (menuItem.getItemId() == R.id.nav_item_lux_level_recomen) {
                FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new Recommendation()).commit();

            }

            if (menuItem.getItemId() == R.id.nav_item_room_index_calc) {
                FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                xfragmentTransaction.replace(R.id.containerView,new RoomIndex()).commit();
            }

            if (menuItem.getItemId() == R.id.nav_item_utilization_factor_calc) {
                FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                xfragmentTransaction.replace(R.id.containerView,new UtilizationFactorCalculator()).commit();
            }

            if (menuItem.getItemId() == R.id.nav_item_conversions) {
                FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                xfragmentTransaction.replace(R.id.containerView,new Conversion()).commit();
            }
            if (menuItem.getItemId() == R.id.nav_item_lux) {
                FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                xfragmentTransaction.replace(R.id.containerView,new LuxSensor()).commit();
            }


            return false;
        }

    });

    /**
     * Setup Drawer Toggle of the Toolbar
     */

    android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
    ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name,
            R.string.app_name);

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    mDrawerToggle.syncState();




}

这是菜单之一(片段)

public class LuxSensor extends Fragment {
TextView textLIGHT_available, textLIGHT_reading;
FragmentManager mFragmentManager;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View x =  inflater.inflate(R.layout.lux_sensor,null);
    textLIGHT_reading
            = (TextView)x.findViewById(R.id.LIGHT_reading);

    SensorManager mySensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE);

    Sensor LightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    if(LightSensor != null){
        mySensorManager.registerListener(
                LightSensorListener,
                LightSensor,
                SensorManager.SENSOR_DELAY_NORMAL);

    }else{
        textLIGHT_available.setText("Sensor.TYPE_LIGHT NOT Available");
    }
    FragmentManager fm = getFragmentManager();

    return x;
}





private final SensorEventListener LightSensorListener
        = new SensorEventListener(){

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType() == Sensor.TYPE_LIGHT){
            textLIGHT_reading.setText(event.values[0]+" LUX");
        }
    }

};

}

我已经尝试过互联网上的解决方案,但它仍然关闭


In fragment你应该使用这样的东西:

  @Override
    //Pressed return button - returns to the results menu
    public void onResume() {
        super.onResume();
        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){

                 //your code

                   return true;
                }
                return false;
            }
        });
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测在fragment android中按下后退按钮的时间? 的相关文章

随机推荐

  • 分组data.fame后的自定义函数

    给定以下数据框 d lt rep c a b each 5 l lt rep 1 5 2 v lt 1 10 df lt data frame d d l l v v v df d l v 1 a 1 1 2 a 2 4 3 a 3 9 4
  • 如何处理复杂的事情?

    您知道代码中对于项目至关重要但可能需要花费大量时间才能完成的特定部分吗 您是否有过这样的感觉 您宁愿做其他事情 可能不太重要 或者根本不写代码 而不是做那部分 你竭尽全力避免并使用你所知道的每一个懒惰技巧来推迟其不可避免的实施的那头野兽 现
  • 我可以对任意排列的浮点数向量进行确定性求和吗?

    假设我有一个 可能很大 由某些黑盒过程产生的浮点数向量 是否可以计算这些数字的按位可再现总和 如果黑盒过程总是以相同的顺序产生数字 那么按位可再现的求和很容易 只需从左到右对它们求和即可 但是 如果数字以随机顺序生成 也许是因为它们是从异步
  • 正则表达式匹配字符串之间的数字

    我需要从字符串 start 和 end 之间的以下文本中提取整数值 并且only之间 111222 garbage 999888 start 123456 end start 654321 end 想要的结果 123456 654321 这
  • 导致TTS初始化失败的原因有哪些?

    在以下场景中观察到 TTS 初始化错误 该错误过于随机 TTS 引擎已安装 语音集已存在 并且可以从辅助功能选项中播放示例 tts TTS 初始化在先前初始化和播放的同一设备上随机失败 在不同的设备 一加 华硕 三星 和各种 Android
  • UICollectionView - 滚动到下一页

    是否有机会使用 UICollectionView 滚动到所需的项目 scrollToItemAtIndexPath 并且不捕捉到项目本身 而是捕捉到项目所属的页面 我启用了分页功能 Cheers 你需要创建NSIndexPath而不是滚动到
  • 创建自定义 UTI 以与空投、iOS 一起使用

    我在 info plist 中使用此代码
  • 在 Bash 中动态构建命令管道

    我正在编写一个带有选项的 bash 程序 例如 my program l 3 a s l 3将输出限制为三行 a将选择我的所有文件 s将对输出进行排序 现在 我可以这样一次使用两个选项 if all 1 then if sort 1 the
  • 升级 ng-jhipster 库以兼容 Angular 16.2.0

    我正在开发一个依赖 ng jhipster 库的 Angular 应用程序 特别是版本 0 16 0 以下是 ng jhipster 的 package json 中的相关部分 name ng jhipster description A
  • 由于“无法获取 QuerySet 类的 repr”错误,嵌套序列化器上的非空约束失败

    尝试在我的 DRF 项目中使用基本的消息传递功能 我似乎对嵌套序列化器验证有问题 我是 DRF 的新手 已经阅读文档几天了 但我一定错过了一些东西 错误发生在行内message Message objects create validate
  • JIT 与解释器

    我找不到 JIT 和解释器之间的区别 Jit 是解释器和编译器的中介 在运行时 它将字节代码转换为机器代码 JVM 或实际机器 下次 它从缓存中获取并运行 我对吗 解释器将直接执行字节码 而不将其转换为机器代码 是对的吗 我们电脑中真正的处
  • HTML5 视频 JavaScript 控件 - 重新启动视频

    我知道如何使用 play 和pause 开始和停止视频 但是如何使用 javascript 将视频放回到 HTML5 的开头 有没有办法将指针移回开头 Set the currentTime http www w3 org TR html5
  • 针对特定集合的多对多关系核心数据查询

    public enum Ability String case newcomer Newcomer case beginner Beginner case intermediate Intermediate case advanced Ad
  • ActiveRecord 包括。指定包含的列

    我有模特个人资料 个人资料有 一个用户 用户模型具有字段电子邮件 当我打电话时 Profile some scope includes user it calls SELECT users FROM users WHERE users id
  • 需要一种内置方法来为现有存储库的 Dapper 添加死锁恢复能力,而无需更改它们

    需要全部做完现有的回购协议 大约 30 对死锁具有容错能力 并通过日志和等待方法从死锁中恢复 尝试成功 经过一些研究并根据项目进行定制后 我使用 Polly 回答了下面的自定义 SqlResiliencyPolicy 但是 我寻求的是 目前
  • 在张量流中检索未命名变量

    我已经训练了一个模型并将其保存在检查点中 但刚刚意识到我忘记命名恢复模型时要检查的变量之一 我知道如何从张量流中检索命名变量 g tf get default graph 进而g get tensor by name name 在这种情况下
  • ubuntu `env:'pg_dump':没有这样的文件或目录`错误

    ubuntu 16 10 中缺少 pg dump 环境变量或文件 运行并安装后sudo apt get install postgresql client see pg dump 和 pg restore 错误的含义是什么 https st
  • 使用 .net core 3.0 并使用 /p:PublishSingleFile=true 标志时如何获取可执行文件的实际路径?

    我最近将一个应用程序升级到 dotnet core 3 并在构建过程中开始使用 PublishSingleFile 标志 通过这两个更改 查找可执行路径的方式发生了变化 现在 我不再获取可执行文件所在的路径 而是重定向到以下位置的随机目录
  • 包含一个主要可执行文件和一个辅助应用程序的应用程序包

    我编写了一个应用程序 它使用外部ask pass 我为gui工具编写的一个小应用程序 cmd行工具来访问ssh 到目前为止 在开发模式下一切都运行良好 但是 当我想要存档 捆绑该应用程序时 它会为我创建一个包含 2 个可执行文件的 zip
  • 如何检测在fragment android中按下后退按钮的时间?

    我的项目带有带片段的导航抽屉 有 5 个菜单 问题是当我转到菜单 4 并按下后退按钮时 应用程序关闭 但我需要应用程序返回到第一个菜单 即片段中的所有菜单 这是主要活动 导航抽屉 的代码 public class MainActivity