使用Fragments取代tabActivity开发网易新闻客户端框架

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现 本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。 阅读详情

前记:手头一直有一个网易新闻客户端的框架(只是一个空架子),基本在上面进行修改,就可以作出自己的东西。里面的主框架是使用TabActivity和TabHost。

近日打开项目发现,TabActivity已然被谷歌取消了,虽然可以继续用,但是谷歌取消它自有取消它的理由。去Doc中一看,TabActivity建议用Fragment代替。于是开始研究这个Fragment使用,一看才知道,这个Fragment是个好东西。具体怎么用可以参照这个帖子:http://www.eoeandroid.com/thread-71642-1-1.html  讲的很好,所以我就不怎么重复了。这里着重讲一下使用Fragments取代tabActivity开发网易新闻客户端框架。这是截图:



原版的源代码下载:http://download.youkuaiyun.com/detail/w553000664/4491229 (注意这个是使用TabHost+TabActivity实现的,不推荐,但是可以作为一个学习的案例)


下面主要讲解如何使用Fragment来实现上述框架

1.分析一下底部使用TabHost来实现没有问题,在原来的项目中,TabHost来管理5个Activity,在这5个Activity中进行切换,来显示不同的功能。所以上面的界面是由每个Activity来提供的。现在改用Fragment后,TabHost切换的不再是Activity,而是Fragment中的内容。所以可以这样布局主Activity:

activity_main.xml:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     style="@style/layout_full"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <TabHost  
  7.         android:id="@+id/tabhost"  
  8.         style="@style/layout_full" >  
  9.   
  10.         <LinearLayout  
  11.             android:layout_width="match_parent"  
  12.             android:layout_height="match_parent"  
  13.             android:orientation="vertical" >  
  14.   
  15.             <FrameLayout  
  16.                 android:id="@android:id/tabcontent"  
  17.                 android:layout_width="fill_parent"  
  18.                 android:layout_height="0.0dip"  
  19.                 android:layout_weight="1.0" >  
  20.   
  21.                 <LinearLayout  
  22.                     android:id="@+id/linearlayout"  
  23.                     style="@style/layout_full"  
  24.                     android:orientation="vertical" >  
  25.   
  26.                     <fragment  
  27.                         android:id="@+id/content_fragment_top"  
  28.                         android:name="fragment_content.TopBarFragment"  
  29.                         style="@style/layout_vertical"  
  30.                         android:layout_weight="1" />  
  31.   
  32.                     <fragment  
  33.                         android:id="@+id/content_fragment"  
  34.                         android:name="fragment_content.Contentfragment"  
  35.                         style="@style/layout_vertical"  
  36.                         android:layout_weight="8" />  
  37.                 </LinearLayout>  
  38.             </FrameLayout>  
  39.   
  40.             <TabWidget  
  41.                 android:id="@android:id/tabs"  
  42.                 android:layout_width="fill_parent"  
  43.                 android:layout_height="wrap_content"  
  44.                 android:visibility="gone" />  
  45.   
  46.             <FrameLayout  
  47.                 android:id="@android:id/tabcontent"  
  48.                 style="@style/layout_vertical"  
  49.                 android:layout_height="wrap_content" >  
  50.   
  51.                 <RelativeLayout  
  52.                     android:id="@+id/layout_bottom"  
  53.                     android:layout_width="fill_parent"  
  54.                     android:layout_height="wrap_content" >  
  55.   
  56.                     <RadioGroup  
  57.                         android:id="@+id/radiogroup"  
  58.                         android:layout_width="fill_parent"  
  59.                         android:layout_height="wrap_content"  
  60.                         android:layout_gravity="bottom"  
  61.                         android:background="@drawable/bottombg"  
  62.                         android:gravity="center_vertical"  
  63.                         android:orientation="horizontal" >  
  64.   
  65.                         <RadioButton  
  66.                             android:id="@+id/radio_news"  
  67.                             android:layout_width="wrap_content"  
  68.                             android:background="@drawable/tab_selector_news"  
  69.                             android:button="@null"  
  70.                             android:checked="true" />  
  71.   
  72.                         <RadioButton  
  73.                             android:id="@+id/radio_topic"  
  74.                             android:layout_width="wrap_content"  
  75.                             android:background="@drawable/tab_selector_topic"  
  76.                             android:button="@null" />  
  77.   
  78.                         <RadioButton  
  79.                             android:id="@+id/radio_pic"  
  80.                             android:layout_width="wrap_content"  
  81.                             android:background="@drawable/tab_selector_pic"  
  82.                             android:button="@null" />  
  83.   
  84.                         <RadioButton  
  85.                             android:id="@+id/radio_follow"  
  86.                             android:layout_width="wrap_content"  
  87.                             android:background="@drawable/tab_selector_follow"  
  88.                             android:button="@null" />  
  89.   
  90.                         <RadioButton  
  91.                             android:id="@+id/radio_vote"  
  92.                             android:layout_width="wrap_content"  
  93.                             android:background="@drawable/tab_selector_vote"  
  94.                             android:button="@null" />  
  95.                     </RadioGroup>  
  96.                 </RelativeLayout>  
  97.             </FrameLayout>  
  98.         </LinearLayout>  
  99.     </TabHost>  
  100.   
  101. </LinearLayout>  

可以看到布局中使用了两个Fragment,上面一个Fragment来显示标题,下面的Fragment来显示内容:

下面是两个Fragment的布局:很简单:

fragment_content.xml

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/layout_content"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="40dip"  
  6.     android:background="#990000" >  
  7.   
  8.     <ImageView  
  9.         android:id="@+id/img_netease_top"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:layout_centerVertical="true"  
  13.         android:layout_marginLeft="10dip"  
  14.         android:src="@drawable/netease_top" />  
  15.   
  16.     <TextView  
  17.         android:id="@+id/fragment_context_context"  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="wrap_content"  
  20.         android:layout_centerVertical="true"  
  21.         android:layout_toRightOf="@+id/img_netease_top"  
  22.         android:text="@string/picture_top_left_text"  
  23.         android:textColor="@android:color/white"  
  24.         android:textSize="20sp" />  
  25.   
  26. </RelativeLayout>  

fragment_topbar.xml
[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/layout_top"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="40dip"  
  6.     android:background="#999999" >  
  7.   
  8.     <ImageView  
  9.         android:id="@+id/img_netease_top"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:layout_centerVertical="true"  
  13.         android:layout_marginLeft="10dip"  
  14.         android:src="@drawable/netease_top" />  
  15.   
  16.     <TextView  
  17.         android:id="@+id/fragment_topbar_topic"  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="wrap_content"  
  20.         android:layout_centerVertical="true"  
  21.         android:layout_toRightOf="@+id/img_netease_top"  
  22.         android:text="@string/picture_top_left_text"  
  23.         android:textColor="@android:color/white"  
  24.         android:textSize="20sp" />  
  25.   
  26. </RelativeLayout>  

下面来看主Activity:

MainActivity.java

[java]  view plain copy
  1. package com.gracker.tabfragment;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.widget.ImageView;  
  7. import android.widget.RadioGroup;  
  8. import android.widget.RadioGroup.OnCheckedChangeListener;  
  9. import android.widget.RelativeLayout;  
  10. import android.widget.TabHost;  
  11.   
  12. import com.and.netease.utils.MoveBg;  
  13.   
  14. import fragment_content.Contentfragment;  
  15. import fragment_content.TopBarFragment;  
  16.   
  17. public class MainActivity extends Activity {  
  18.   
  19.     RadioGroup radioGroup;  
  20.     ImageView img;  
  21.     TabHost tabHost;  
  22.     int startLeft;  
  23.     RelativeLayout bottom_layout;  
  24.   
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.   
  30.         tabHost = (TabHost) findViewById(R.id.tabhost);  
  31.         bottom_layout = (RelativeLayout) findViewById(R.id.layout_bottom);  
  32.   
  33.         radioGroup = (RadioGroup) findViewById(R.id.radiogroup);  
  34.         radioGroup.setOnCheckedChangeListener(checkedChangeListener);  
  35.   
  36.         img = new ImageView(this);  
  37.         img.setImageResource(R.drawable.tab_front_bg);  
  38.         bottom_layout.addView(img);  
  39.     }  
  40.   
  41.     @Override  
  42.     public boolean onCreateOptionsMenu(Menu menu) {  
  43.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  44.         return true;  
  45.     }  
  46.   
  47.     // 当Tab发生变化时,改变tab的标签的显示图片  
  48.     private OnCheckedChangeListener checkedChangeListener = new OnCheckedChangeListener() {  
  49.   
  50.         @Override  
  51.         public void onCheckedChanged(RadioGroup group, int checkedId) {  
  52.             Contentfragment fragment = (Contentfragment) getFragmentManager()  
  53.                     .findFragmentById(R.id.content_fragment);  
  54.             TopBarFragment fragmentTopic = (TopBarFragment) getFragmentManager()  
  55.                     .findFragmentById(R.id.content_fragment_top);  
  56.   
  57.             switch (checkedId) {  
  58.   
  59.             case R.id.radio_news:  
  60.                 fragment.changeContent(0);  
  61.                 fragmentTopic.changeContent(0);  
  62.   
  63.                 tabHost.setCurrentTabByTag("news");  
  64.                 MoveBg.moveFrontBg(img, startLeft, 0, 0, 0);  
  65.                 startLeft = 0;  
  66.                 break;  
  67.             case R.id.radio_topic:  
  68.                 fragment.changeContent(1);  
  69.                 fragmentTopic.changeContent(1);  
  70.                   
  71.                 tabHost.setCurrentTabByTag("topic");  
  72.                 MoveBg.moveFrontBg(img, startLeft, img.getWidth(), 0, 0);  
  73.                 startLeft = img.getWidth();  
  74.                 break;  
  75.             case R.id.radio_pic:  
  76.                 fragment.changeContent(2);  
  77.                 fragmentTopic.changeContent(2);  
  78.                   
  79.                 tabHost.setCurrentTabByTag("picture");  
  80.                 MoveBg.moveFrontBg(img, startLeft, img.getWidth() * 2, 0, 0);  
  81.                 startLeft = img.getWidth() * 2;  
  82.                 break;  
  83.             case R.id.radio_follow:  
  84.                 fragment.changeContent(3);  
  85.                 fragmentTopic.changeContent(3);  
  86.                   
  87.                 tabHost.setCurrentTabByTag("follow");  
  88.                 MoveBg.moveFrontBg(img, startLeft, img.getWidth() * 3, 0, 0);  
  89.                 startLeft = img.getWidth() * 3;  
  90.                 break;  
  91.             case R.id.radio_vote:  
  92.                 fragment.changeContent(4);  
  93.                 fragmentTopic.changeContent(4);  
  94.                   
  95.                 tabHost.setCurrentTabByTag("vote");  
  96.                 MoveBg.moveFrontBg(img, startLeft, img.getWidth() * 4, 0, 0);  
  97.                 startLeft = img.getWidth() * 4;  
  98.                 break;  
  99.   
  100.             default:  
  101.                 break;  
  102.             }  
  103.         }  
  104.     };  
  105. }  

核心就在check监听器中,这里获取两个Fragment的实例,并修改其中的内容。

下面是两个Fragment的代码:

Contentfragment.java

[java]  view plain copy
  1. package fragment_content;  
  2.   
  3. import android.app.Fragment;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.TextView;  
  10.   
  11. import com.gracker.tabfragment.R;  
  12.   
  13. public class Contentfragment extends Fragment {  
  14.   
  15.     TextView mTextView; // 显示的内容  
  16.   
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         // TODO Auto-generated method stub  
  20.         Log.v("Contentfragment", "Contentfragment_onCreate");  
  21.         super.onCreate(savedInstanceState);  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onDestroy() {  
  26.         // TODO Auto-generated method stub  
  27.         super.onDestroy();  
  28.     }  
  29.   
  30.     @Override  
  31.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  32.             Bundle savedInstanceState) {  
  33.         Log.v("Contentfragment", "Contentfragment_onCreateView");  
  34.         // super.onCreateView(inflater, container, savedInstanceState);  
  35.         // Inflate the layout for this fragment  
  36.         // TextView testText = (TextView)findViewById(R.id.item_detail);  
  37.         return inflater.inflate(R.layout.fragment_content, container, false);  
  38.     }  
  39.   
  40.     public void changeContent(int index) {  
  41.         mTextView = (TextView) getActivity().findViewById(  
  42.                 R.id.fragment_context_context);  
  43.         switch (index) {  
  44.         case 0:  
  45.   
  46.             mTextView.setText("1");  
  47.             break;  
  48.         case 1:  
  49.   
  50.             mTextView.setText("2");  
  51.             break;  
  52.         case 2:  
  53.   
  54.             mTextView.setText("3");  
  55.             break;  
  56.         case 3:  
  57.   
  58.             mTextView.setText("4");  
  59.             break;  
  60.         case 4:  
  61.   
  62.             mTextView.setText("5");  
  63.             break;  
  64.         default:  
  65.             break;  
  66.         }  
  67.     }  
  68.   
  69. }  

TopBarFragment.java:
[java]  view plain copy
  1. package fragment_content;  
  2.   
  3. import com.gracker.tabfragment.R;  
  4.   
  5. import android.os.Bundle;  
  6. import android.app.Fragment;  
  7. import android.util.Log;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.TextView;  
  12.   
  13. public class TopBarFragment extends Fragment {  
  14.     TextView mTextView;  
  15.   
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         // TODO Auto-generated method stub  
  19.         Log.v("Contentfragment", "Contentfragment_onCreate");  
  20.         super.onCreate(savedInstanceState);  
  21.     }  
  22.   
  23.     @Override  
  24.     public void onDestroy() {  
  25.         // TODO Auto-generated method stub  
  26.         super.onDestroy();  
  27.     }  
  28.   
  29.     @Override  
  30.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  31.             Bundle savedInstanceState) {  
  32.         Log.v("Contentfragment", "Contentfragment_onCreateView");  
  33.         //super.onCreateView(inflater, container, savedInstanceState);  
  34.         // Inflate the layout for this fragment  
  35. //      TextView testText = (TextView)findViewById(R.id.item_detail);  
  36.         return inflater.inflate(R.layout.fragment_topbar, container, false);  
  37.     }  
  38.       
  39.     public void changeContent(int index) {  
  40.         mTextView = (TextView) getActivity().findViewById(  
  41.                 R.id.fragment_topbar_topic);  
  42.         switch (index) {  
  43.         case 0:  
  44.   
  45.             mTextView.setText("1");  
  46.             break;  
  47.         case 1:  
  48.   
  49.             mTextView.setText("2");  
  50.             break;  
  51.         case 2:  
  52.   
  53.             mTextView.setText("3");  
  54.             break;  
  55.         case 3:  
  56.   
  57.             mTextView.setText("4");  
  58.             break;  
  59.         case 4:  
  60.   
  61.             mTextView.setText("5");  
  62.             break;  
  63.         default:  
  64.             break;  
  65.         }  
  66.     }  
  67. }  

核心代码就这么多,其实里面还有很多小细节,比如Tabhost切换是,背景的滑动,selector的使用等。

这个例子只是讲解初级的Fragment的使用,Fragment的另一个好处就是屏幕适配,可以让程序在平板和手机上显示不同的效果,仔细研究一下也是很有好处的

全功能爬虫框架:Botasaurus 的详细使用(现代化、反检测、高并发的智能爬虫框架) Botasaurus是一个基于 Python 的全栈式智能数据采集框架。它深度融合了以下关键技术: 无头浏览器自动化(Headless Browser Automation):基于 Playwright 或 Puppeteer,支持 Chromium、Firefox、WebKit; 高级反检测引擎(Anti-Detection Engine):自动绕过 WebDriver、Canvas、AudioContext 等 50+ 种指纹检测; 声明式任务模型(Declarative Task Model):用装 阅读详情

相关推荐

带隙基准电路实战:温度补偿与流片调优全解析

带隙基准(BGR)是模拟芯片中实现高精度、低温漂电压参考的核心电路,其本质是利用硅材料禁带宽度的物理稳定性,通过PTAT(正温度系数)与CTAT(负温度系数)电压的加权叠加抵消温度影响。原理上需兼顾一阶线性补偿与二阶曲率校正,技术价值在于支撑ADC/DAC/LDO等关键模块的精度与可靠性。典型应用场景涵盖车规级MCU、工业传感器和高精度电源管理芯片。工程落地难点集中于工艺偏差、运放失调、寄生效应及版图热电耦合——这正是‘带隙基准设计’与‘带隙基准调优’的根本分野。本文聚焦真实流片经验,深入拆解Widlar架

weixin_42628280的博客 255

【Android学习笔记】使用Fragments取代tabActivity开发网易新闻客户端框架

前记:手头一直有一个网易新闻客户端的框架(只是一个空架子),基本在上面进行修改,就可以作出自己的东西。里面的主框架是使用TabActivity和TabHost。 近日打开项目发现,TabActivity已然被谷歌取消了,虽然可以继续用,但是谷歌取消它自有取消它的理由。去Doc中一看,TabActivity建议用Fragment代替。于是开始研究这个Fragment使用,一看才知道,这个Fragm

edisonkun的专栏 6150

文献阅读笔记:量子微波测量技术综述

量子微波测量技术研究进展:量子微波测量技术利用里德堡原子与微波电场的相干相互作用,突破了传统测量方法的物理限制。该技术基于电磁诱导透明效应和里德堡原子能级跃迁原理,通过激光激发原子并监测光谱变化来测量微波电场强度。相比传统方法,量子微波测量具有超高灵敏度(理论极限可达nV/cm)、宽动态范围(超过100dB)、小型化等显著优势,且测量结果可直接溯源至普朗克常数。典型实验系统包括光源、原子气室和探测器,采用光谱法、干涉法等多种测量方法。近年来,该技术在基础研究和应用方面取得重要进展,展现出在通信、雷达、计量等

Grow into a more wonderful you 991

[Android学习笔记[使用Fragments取代tabActivity开发网易新闻客户端框架

前记:手头一直有一个网易新闻客户端的框架(只是一个空架子),基本在上面进行修改,就可以作出自己的东西。里面的主框架是使用TabActivity和TabHost。 近日打开项目发现,TabActivity已然被谷歌取消了,虽然可以继续用,但是谷歌取消它自有取消它的理由。去Doc中一看,TabActivity建议用Fragment代替。于是开始研究这个Fragment使用,一看才知道,这个Fragm

Gracker的专栏 1万+

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 458

Windows如何使用Anaconda 3进行keras环境的配置

** Windows如何使用Anaconda 3进行keras环境的配置 搭建Keras环境* Anaconda3如何安装keras,主要包括下面三步: 1.安装mingw libpython 2.安装theano 3.安装keras 若你还没有按装anaconda,赶紧下载安装吧! 下载途径有两个 (1)Anaconda版本为Anaconda 4.4.0,对应的python版本为3.6,附上An...

Lance_liangliang的博客 1602

Android模拟器之间的网络通信及Ping主机

实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便。 首先要获得的模拟器的IP地址 在本机上启动两个模拟器,emulator-5554,emulator-5556查看模拟器ip 在命令行窗口输入命令 adb –s emulator-5554 shell getprop 找到一下两行: [ne

gwpJava的专栏 7643

避坑指南:Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复

本文详细介绍了在Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复方法。从环境准备、依赖安装到编译优化,提供了实用的避坑指南和解决方案,帮助开发者高效完成安装并避免常见问题。特别针对源码安装过程中的疑难杂症给出了具体修复建议。

weixin_33712987的博客 383

HTTP505错误

血的教训呀!!!!!!!!!!!!!!!!!!!!!!!! 搞了我好几个小时!!!!!!! 不但是空格问题 还有就是URL参数中文乱码的问题 解决办法: 一定要先将你请求资源的中文部分的名字使用下面的方法重新编码为 服务器端的编码格式(我的tomcat编码格式为utf-8) mp3Name=java.net.URLEncoder.encode("中文文件.mp3","utf

gwpJava的专栏 4729

C语言读取CSV文件的方法1

逗号分隔值文件格式(CSV),以纯文本形式存储表格数据,它是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。本文介绍利用C语言标准库中的一个字符串处理函数 strtok()来对CSV文件内容进行读取的基本方法

白马负金羁 1万+

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 145

The operation cannot be completed. See the details.

The operation cannot be completed.  See the details. Cannot complete the install because one or more required items could not be found.   Software being installed: Android Native Development Too

gwpJava的专栏 4112

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1307

FAILED TO FIND PROVIDER INFO FOR COM.……

学习content provider,做了个练习,两天来一直不成功,提示: failed to find provider info for com.…… 网上也有很多人提这个问题,没有找到适用的解决方法。今早又一遍检查代码,突然发现,AUTHORITY在provider.java中有设定,在AndroidManifest.xml中也有设定,但两个值有细微差别。同一个表的AUTHORITY

gwpJava的专栏 2261

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

解决java java.io.FileNotFoundException: http:\localhost:8080 (文件名、目录名或卷)问题

解决java java.io.FileNotFoundException: http:\localhost:8080 (文件名、目录名或卷) http中双斜杠变单斜杠的问题     File file = new File("http://127.0.0.1:8080/weibo.properties");         InputStream in = null;

gwpJava的专栏 1840

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android sdk for windows出现A folder failed to be renamed or moved 解决办法

安装过程错误信息如下: -=Warning !=- A folder failed to be renamed or moved.On Windows this typically means that  a program is using that folder (for example Windows Explorer or your anti-virus software.)

gwpJava的专栏 1749

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

低成本推广App:合作换量互推 注重时间描述

第一:基础上线——各大下载市场、应用商店、大平台、下载站的覆盖 推广的第一步是要上线,这是最基础的。无需砸钱,只需最大范围的覆盖。 下载市场:安卓、机锋、安智、应用汇、91、木蚂蚁、N多、优亿、安机、飞流等; 应用商店:geogle商店、HTC商城、历趣、十字猫、开奇、爱米、我查查、魅族商店、联想开发者社区、oppo应用商店等; 大平台:MM社区、沃商店、天翼空间、华为智汇

gwpJava的专栏 1574

java.net.SocketException: Permission denied

在Android项目开发时,在获取IP地址时出现java.net.SocketException: Permission denied异常,这是一个典型的异常。 解决方法: 在AndroidManifest.xml 配置: 如:     package="com.example.getmobileip"     android:versionCode

gwpJava的专栏 1562

自定义实现圆形播放进度条

Android提供了很多基本的控件实现,但不是一个完整、强大的实现。 幸运的是,Android提供了自定义控件的实现,有了自定义控件,我们就可以再Android的基础控件上实现我们想要的功能或者自定义的外观。 以ProgressBar为例,对于可调节的进度条似乎只有长条形的ProgressBar(圆形的都是不停转动的那种) 假如我们想要一个可调节进度的圆形进度条呢。。。 O

gwpJava的专栏 1500

我对fill_parent的理解

fill_parent的意思应该是填满父控件中剩余的控件   假设一个使用了fill_parent的控件 在它之前已经有别的控件占据了父控件中的一些位置 那么该fill_parent的控件则只能强制将剩余的控件填满 而不可能将之前的那些控件所占的控件给挤掉  这是一个先入为主的游戏规则 由此可以看出 2.2之后的版本出现match_parent这个名字来代替fill_parent是正确的 使用m

gwpJava的专栏 1476

BitmpaFactory和BitmapFactory.Options详解及优化解码图片时使用的内存

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的

gwpJava的专栏 1408

精确定位及恢复ListView的位置

工作中遇到一个需求,对ListView某一项操作后刷新ListView,但是如果直接刷新,界面上ListView从第一列开始显示,用户体验不好,于是在网上搜了一些恢复LIstView滑动位置的方法。解决办法如下:     List> list; private int scrollPos;     private int scrollTop;     private void sh

gwpJava的专栏 1394

application resolvingXML is waiting for the debugger to attach

在eclipse中进行调试时经常出现下面这样的提示 Application XXX  is waiting for the debugger to attach 但是一般情况下,过了一会之后会进入调试状态   但是最近两天进行调试的时候模拟器上九一直停留在上面这个提示对话框,一直不能进入调试状态 在按照网上说的在dos命令行中进行 adb kill-server

gwpJava的专栏 1242

在Android模拟器(AVD)中安装Android应用 *.app

NOTE:  如何打开虚拟机(AVD)请自己查资料               如果adb install 命令无效,说明环境变量没有配置或没有配置准确。参阅SDK安装目录下的adb_has_moved.txt 然后设置。 1.将android虚拟机打开 2.然后在cmd 中输入APK的绝对路径 3.最后输入“adb install” + 文件名.apk

gwpJava的专栏 1185
上一篇: URL无法下载含有中文名的文件
下一篇: android通过USB使用真机调试程序
gwpJava
博客等级 码龄14年 11粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值