Fragment监听返回键
来源:互联网 发布:电气电路图用什么软件 编辑:程序博客网 时间:2024/05/04 14:46
最近在解决系统中一个Bug,问题的原因是6.0版本用的activity来实现的,此时可以实
现onKeyDown方法,但是到了7.0版本发现改成了Fragment来实现,此时就不能实现
onKeyDown方法了,但是逻辑上还是需要监听返回键的,所有问题就是:如何实现
Fragment监听返回键。其中参考了一文章
https://github.com/mxy1228/FragmentHandleBackDemo 但是感觉耦合性太
强了。
综上所述:我的方法是在Activity中添加一内部接口,让fragment来实现。有点类似与
Activity与fragment的通信吧,通信中使用的是在fragment中定义一接口,让Activity
来实现,我的方法跟通信刚好相反。
1,Activity代码
public class KeyEventTest extends AppCompatActivity { private static final String TAG = "KeyEventTest"; private Fragment mCurrentFragment; interface FragmentKeyListener { void onBackPressed(); //如果想监听其他的按键,可以在这里实现onKeyDown等一系列方法 //boolean onKeyDown(int keyCode, KeyEvent event); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_key_event_test); mCurrentFragment = BlankFragment.newInstance("1", "2"); FragmentManager fm = getFragmentManager(); fm.beginTransaction().add(R.id.container, mCurrentFragment, "blankFragment").commit(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { if (mCurrentFragment instanceof FragmentKeyListener) { ((FragmentKeyListener) mCurrentFragment).onBackPressed(); } super.onBackPressed(); Log.i(TAG, "onBackPressed"); }}
2,Fragment中代码
public class BlankFragment extends Fragment implements KeyEventTest.FragmentKeyListener{ private static final String TAG = "BlankFragment"; // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; // TODO: Rename and change types of parameters private String mParam1; private String mParam2; public BlankFragment() { // Required empty public constructor } public static BlankFragment newInstance(String param1, String param2) { BlankFragment fragment = new BlankFragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_blank, container, false); } @Override public void onBackPressed() { Log.i(TAG, "BlankFragment onBackPressed"); }}
如果有哪里不对还请帮忙指正。谢谢
0 0
- fragment监听返回键
- Fragment监听返回键
- Fragment 监听返回键
- Fragment监听返回键
- Fragment监听返回键
- Fragment监听返回键
- fragment监听onBackPressed返回键
- android fragment 监听返回键
- Fragment中监听返回键
- Fragment Webview 返回键监听
- Fragment中监听返回键
- Android fragment监听返回键
- 让Fragment监听返回键
- fragment监听onBackPressed返回键
- 优雅的让Fragment监听返回键
- 优雅的让Fragment监听返回键
- android Fragment 无法用返回键监听
- Android必知必会-Fragment监听返回键事件
- phpstorm表单递交post出错get正确的解决方法
- POJ_3617_Best Cow Line
- 排除指定的序列
- Http网络编程
- Java Web开发入门
- Fragment监听返回键
- 手机应用还有创新吗?
- 树莓派 无线网络配置
- echo print() print_r() var_dump()的区别
- 数据库复习笔记——事物&并发控制
- [leetcode] 319. Bulb Switcher
- 从maker-P结果中筛选完整CDS
- JavaWEB中读取配置信息
- oracle的时间处理