首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

Android -- Handling back button press Inside Fragments

干货(1) 首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对Back事件的消费逻辑。onBackPressed返回布尔值,宿主FragmentActivity将会根据该方法的返回值判断子Fragment是否有消费Back事件。此外,宿主FragmentActivity还会保持一份当前Fragment的引用,当用户按下Back键时,宿主Activity会判断当前Fragment是否需要消费该事件,如果没有Fragment消费才会自己消费。 public abstract class BackHandledFragment extends Fragment { protected BackHandledInterface mBackHandledInterface; /** * 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑 * FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件 * 如果没有Fragment消息时FragmentActivity自己才会消费该事件 */ protected abstract boolean onBackPressed(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(!(getActivity() instanceof BackHandledInterface)){ throw new ClassCastException("Hosting Activity must implement BackHandledInterface"); }else{ this.mBackHandledInterface = (BackHandledInterface)getActivity(); } } @Override public void onStart() { super.onStart(); //告诉FragmentActivity,当前Fragment在栈顶 mBackHandledInterface.setSelectedFragment(this); } } 宿主FragmentActivity需要继承BackHandledIntegerface,子Fragment会通过该接口告诉宿主FragmentActivity自己是当前屏幕可见的Fragment。 public interface BackHandledInterface { public abstract void setSelectedFragment(BackHandledFragment selectedFragment); } 所以在Fragment的onCreate中会判断宿主FragmentActivity是否已继承了该接口。在Fragment的onStart()方法中就会调用该接口告诉宿主FragmentActivity自己是当前屏幕可见的Fragment。 宿主FragmentActivity就可以在onBackPressed()方法中对Back事件进行判断处理了。 public class MainActivity extends FragmentActivity implements BackHandledInterface{ private BackHandledFragment mBackHandedFragment; private boolean hadIntercept; @Override public void setSelectedFragment(BackHandledFragment selectedFragment) { this.mBackHandedFragment = selectedFragment; } @Override public void onBackPressed() { if(mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()){ if(getSupportFragmentManager().getBackStackEntryCount() == 0){ super.onBackPressed(); }else{ getSupportFragmentManager().popBackStack(); } } } } 干货(2) 在Fragment的onResume中通过View去监听。(要注意setFocusableInTouchMode()和requestFocus()) @Override 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){ // handle back button return true; } return false; } }); } 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4471936.html如需转载请自行联系原作者

优秀的个人博客,低调大师

Android -- 分享功能和打开指定程序

打开指定程序 Intent intent = new Intent(); ComponentName cmp = new ComponentName("com.sina.weibo","com.sina.weibo.EditActivity"); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(cmp); startActivityForResult(intent, 0); 另:几个常用的Package命令: 新浪微博(编辑界面):com.sina.weibo com.sina.weibo.EditActivity 腾讯微博(编辑界面):com.tencent.WBlog com.tencent.WBlog.activity.MicroblogInput 微信: com.tencent.mm com.tencent.mm.ui.LauncherUI QQ: com.tencent.mobileqq com.tencent.mobileqq.activity.HomeActivity 分享 Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT,"分享"); intent.putExtra(Intent.EXTRA_TEXT, "hello,weibo!"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, "share")); 其中 intent.putExtra(Intent.EXTRA_TEXT, "hello,weibo!"); 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3888189.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android -- 写xml到SD卡中

信息类 private String body; private String number; private int type; private long id; 四个变量,然后有分别set和get。构造函数分别初始化这四个变量。 生成xml标签函数 public static void backUpXml(File file, List<XmlInfo> smsInfos) throws Exception { //xml文件的序列号器 帮助生成一个xml文件 FileOutputStream fos = new FileOutputStream(file); //获取到xml的序列号 XmlSerializer serializer = Xml.newSerializer(); //序列化初始化 serializer.setOutput(fos, "utf-8"); //创建xml serializer.startDocument("utf-8", true); serializer.startTag(null, "smss"); for(XmlInfo info : smsInfos) { serializer.startTag(null, "sms"); serializer.attribute(null, "id", String.valueOf(info.getId())); serializer.startTag(null, "body"); serializer.attribute(null, "body", info.getBody()); serializer.endTag(null, "body"); serializer.startTag(null, "number"); serializer.text(info.getNumber()); serializer.endTag(null, "number"); serializer.endTag(null, "sms"); } serializer.endTag(null, "smss"); serializer.endDocument(); fos.flush(); fos.close(); } onCreate中进行处理 List<XmlInfo> xmlinfo = new ArrayList<XmlInfo>(); XmlInfo xml1 = new XmlInfo("aaaa","12345678912",1,1); XmlInfo xml2 = new XmlInfo("bbbb","21987654321",1,2); XmlInfo xml3 = new XmlInfo("cccc","12345678912",1,3); xmlinfo.add(xml1); xmlinfo.add(xml2); xmlinfo.add(xml3); File file = new File(Environment.getExternalStorageDirectory(),"back.xml"); //File file = new File(MainActivity.this.getFilesDir(),"back.xml"); try { XmlManager.backUpXml(file, xmlinfo); Toast.makeText(this, "备份成功", 0).show(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); Toast.makeText(this, "备份失败", 0).show(); } 我是天王盖地虎的分割线 源代码:http://pan.baidu.com/s/1dD1Qx01 Xml普通解析.zip 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3789579.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android -- Options Menu,Context Menu,Popup Menu

Options Menu 创建选项菜单的步骤: 1、覆盖Activity 的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用 2、调用Menu 的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem 的setIcon( )方法来为菜单项设置图标 3、当菜单项(MenuItem)被选择时,覆盖Activity 的onOptionsItemSelected(MenuItem item)来响应事件 public class MainActivity extends Activity { // 定义一些变量,后面直接拿来用 private static final int START_ITEM = Menu.FIRST; private static final int OVER_ITEM = Menu.FIRST + 1; private static final int SET_ITEM1 = Menu.FIRST + 2; private static final int SET_ITEM2 = Menu.FIRST + 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 添加菜单项(组ID,菜单项ID,排序,标题) menu.add(0, START_ITEM, 100, "开始"); menu.add(0, OVER_ITEM, 200, "结束"); // 添加子菜单 SubMenu sub1 = menu.addSubMenu("设置"); sub1.add(1, SET_ITEM1, 300, "设置声音"); sub1.add(1, SET_ITEM2, 400, "设置桌面"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case START_ITEM: // 提示信息 Toast.makeText(this, "开始", Toast.LENGTH_SHORT).show(); break; case OVER_ITEM: // 提示信息 Toast.makeText(this, "结束", Toast.LENGTH_SHORT).show(); break; case SET_ITEM1: // 提示信息 Toast.makeText(this, "声音设置", Toast.LENGTH_SHORT).show(); break; case SET_ITEM2: // 提示信息 Toast.makeText(this, "设置桌面", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); } } Context Menu 顾名思义,与上下文(环境)有关。思想类似于Windows中的右键单击弹出的快捷菜单。操作时需要长时间按住某个东东不放。 创建上下文菜单的步骤: 1、覆盖Activity 的onCreateContextMenu(Menu menu)方法,调用Menu的add()方法添加菜单项(MenuItem)。 2、覆盖Activity 的onContextItemSelected(MenuItem iitem)来响应事件。 3、调用registerForContextMenu( )方法来为视图注册上下文菜单。 public class MainActivity2 extends Activity { private Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); // 获取BUTTON对象 btn1 = (Button) findViewById(R.id.button1); //在button上注册上下文菜单 registerForContextMenu(btn1); } // 创建上下文菜单的事件方法 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.menu_main2, menu); } // 上下文菜单项触发事件 @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.start: Toast.makeText(this, "开始。。。", Toast.LENGTH_SHORT).show(); break; case R.id.over: Toast.makeText(this, "结束。。。", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onContextItemSelected(item); } } Popup Menu 弹出式菜单. 弹出菜单是停靠在一个View上的一个模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。这是非常有用的。 public class MainActivity3 extends Activity implements OnMenuItemClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main3); } public void showPopupMenu(View v){ //创建弹出式菜单对象(最低版本11) PopupMenu popup = new PopupMenu(this,v); //获取菜单填充器 MenuInflater inflater = popup.getMenuInflater(); //填充菜单 inflater.inflate(R.menu.menu_main3, popup.getMenu()); //设置菜单项的单击事件 popup.setOnMenuItemClickListener(this); popup.show(); } //弹出式菜单的单击事件处理 @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.copy: Toast.makeText(this, "复制。。。", Toast.LENGTH_LONG).show(); break; case R.id.del: Toast.makeText(this, "删除。。。", Toast.LENGTH_LONG).show(); break; default: break; } return false; } } 我是天王盖地虎的分割线 源代码:http://pan.baidu.com/s/1dD1Qx01 menu学习.zip 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3828819.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android--多线程断点续传

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/78057591 什么是多线程下载? 多线程下载其实就是迅雷,BT一些下载原理,通过多个线程同时和服务器连接,那么你就可以榨取到较高的带宽了,大致做法是将文件切割成N块,每块交给单独一个线程去下载,各自下载完成后将文件块组合成一个文件,程序上要完成做切割和组装的小算法。 多线程下载文件的过程是: (1)首先获得下载文件的长度,然后设置本地文件的长度。 HttpURLConnection.getContentLength();//获取下载文件的长度 RandomAccessFile file = new RandomAccessFile("QQWubiSetup.exe","rwd"); file.setLength(filesize);//设置本地文件的长度 (2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置。 如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条线程开始下载的位置如下图所示。 例如10M大小,使用3个线程来下载, 线程下载的数据长度 (10%3 == 0 ? 10/3:10/3+1) ,第1,2个线程下载长度是4M,第三个线程下载长度为2M 下载开始位置:线程id*每条线程下载的数据长度 = ? 下载结束位置:(线程id+1)*每条线程下载的数据长度-1=? (3)使用Http的Range头字段指定每条线程从文件的什么位置开始下载,下载到什么位置为止, 如:指定从文件的2M位置开始下载,下载到位置(4M-1byte)为止 代码如下:HttpURLConnection.setRequestProperty("Range", "bytes=2097152-4194303"); (4)保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据。 RandomAccessFilethreadfile= newRandomAccessFile("QQWubiSetup.exe ","rwd"); threadfile.seek(2097152);//从文件的什么位置开始写入数据 代码实现附上大神写的:http://www.jb51.net/article/104456.htm http://blog.csdn.net/u013626215/article/details/51281190 https://github.com/duzechao/OKHttpUtils https://github.com/duzechao/DownloadManager 推荐这个OKGO框架,完美实现:https://github.com/jeasonlzy/okhttp-OkGo

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册