View切换之后setOnEditorActionListener就失效了

pamgu 2017-02-14 08:19:34
诸位好。首先祝回帖的各位情人节愉快、明年情人节更愉快!
我在 activiey_main 里用 setOnEditorActionListener 给输入框设定了监听事件,并且用 setContentView() 切到R.layout.s4,而在 R.layout.s4 中有可以通过 onBack3() 再 setContentView,回到R.layout.activity_main来。

测试中发现:从 layout.s4 回到 layout.activity_main 之后,监听事件就失灵了,无法再切到 s4 了。我也曾经把 代码挪到 onStart() onResume()里面,效果不变。
测试平台是 魅蓝3s。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//下面这些代码也曾经挪到 onStart() 或者 onResume()里面,然并卵
masterPswd = (TextView)findViewById(R.id.editText);
masterPswd.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
setContentView(R.layout.s4);
return false;
}
});
}

@Override
protected void onResume(){
super.onResume();
}

public void onBack3(View view) {
setContentView(R.layout.activity_main);
}
}


...全文
544 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jscoolstar 2017-02-14
  • 打赏
  • 举报
回复
这种情况,你最好是把两个view写到一个Framelayout/relativelayout中,然后控制隐藏消失。如果非要使用setcontentview,其实你可以先用inflatelayout.from(this).inflate先得到两个view,然后使用setcontentview(VIew v)这个重载方法,而不是用setcontentview(int layoutid)
jscoolstar 2017-02-14
  • 打赏
  • 举报
回复
然后,虽然我看不了源码,但是setContentView(R.layout.activity_main)这个方法我觉得,它十有八九是用layoutinflate来将你的layoutId转成view,然后set的。所以你重新执行setContentView,虽然传入的是同一个layoutid,但其实是新的view,所以你原来findviewbyid的那些控件应该都是原来view的子控件,你setcontentview之后,必须重新findviewbyid 去给控件赋值,然后再加监听。(如果不重新findviewbyid赋值,直接加监听,其实还是加在了原来的已经不用的view的子view上)
jscoolstar 2017-02-14
  • 打赏
  • 举报
回复
引用 2 楼 pamgu 的回复:
[quote=引用 1 楼 ganshenml 的回复:] 从 layout.s4 回到 layout.activity_main 之后,监听事件就失灵了,无法再切到 s4 了 —————————————————————————— 此时你的布局文件已经变成了s4,那么相应的组件及监听事件要重新初始化
我也是这样想的,所以我尝试在 onResume 里初始化,但是没效果,我想是因为 onResume 是 activity 一级的,布局文件的改变不会触发它。 那么,我应该在哪里重新初始化呢?[/quote] 你的理解是对的,你只是重新调用了setcontentview,这只是个方法,不会触发ativity的生命周期。你可以把初始化的部分写在setContentView(R.layout.activity_main);之后就可以了
ganshenml 2017-02-14
  • 打赏
  • 举报
回复
引用 2 楼 pamgu 的回复:
[quote=引用 1 楼 ganshenml 的回复:] 从 layout.s4 回到 layout.activity_main 之后,监听事件就失灵了,无法再切到 s4 了 —————————————————————————— 此时你的布局文件已经变成了s4,那么相应的组件及监听事件要重新初始化
我也是这样想的,所以我尝试在 onResume 里初始化,但是没效果,我想是因为 onResume 是 activity 一级的,布局文件的改变不会触发它。 那么,我应该在哪里重新初始化呢?[/quote] 如果想改变布局,那么就通过布局本身来实现。比如用FrameLayout的Hidden 与Visible来实现你的目的
pamgu 2017-02-14
  • 打赏
  • 举报
回复
引用 1 楼 ganshenml 的回复:
从 layout.s4 回到 layout.activity_main 之后,监听事件就失灵了,无法再切到 s4 了 —————————————————————————— 此时你的布局文件已经变成了s4,那么相应的组件及监听事件要重新初始化
我也是这样想的,所以我尝试在 onResume 里初始化,但是没效果,我想是因为 onResume 是 activity 一级的,布局文件的改变不会触发它。 那么,我应该在哪里重新初始化呢?
ganshenml 2017-02-14
  • 打赏
  • 举报
回复
从 layout.s4 回到 layout.activity_main 之后,监听事件就失灵了,无法再切到 s4 了 —————————————————————————— 此时你的布局文件已经变成了s4,那么相应的组件及监听事件要重新初始化
内容概要:本文围绕“数据驱动下光伏建筑群源荷不确定性解析及其储能多目标低碳经济调度研究”展开,提出了一种融合数据驱动方法与多目标优化算法的综合调度框架。研究首先基于历史数据对光伏发电出力与建筑负荷的不确定性进行建模,采用概率预测与场景生成技术刻画源荷波动特性,并通过典型场景提取降低输入复杂性。在此基础上,构建了以最小化系统运行成本、降低碳排放强度、提升可再生能源消纳率为目标的多目标优化模型,引入NSGA-II等先进智能优化算法求解Pareto最优前沿,实现经济性与低碳性的协同优化。通过Python编程完成模型搭建与仿真验证,结果表明该方法能有效应对源荷双重不确定性,在保障供电可靠性的前提下,实现了储能系统的优化配置与多目标调度决策的均衡协调; 适合人群:具备一定电力系统基础知识和Python编程能力,从事能源系统优化、智能调度、低碳技术等相关领域的研究生、科研人员及工程技术人员; 使用场景及目标:①应用于光伏建筑群、工业园区微电网等分布式能源系统的运行调度;②支撑含储能系统的多目标低碳经济调度决策,兼顾能源成本节约与碳排放控制双重目标;③为相关课题的研究与工程实践提供完整的算法实现参考与可复现的仿真案例支持; 阅读建议:建议读者结合文中提供的Python代码深入理解模型构建与求解流程,重点关注不确定性建模与多目标优化的耦合机制,可在实际数据基础上复现并改进算法,进一步探索不同权重策略下的调度方案优选方法。

80,489

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧