作者 : 韩曙亮

转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191


本博客代码地址

-- 单一 Fragment 示例 : https://github.com/han1202012/Octopus-Fragement.git

-- 可复用的 Fragment 示例 : https://github.com/han1202012/Octopus-Fragement_TwoModel.git

.


Fragment 总结 


(1) 




.




1. Fragement 概述


Fragement 与 Activity 生命周期关系 : Fragement 嵌入到 Activity 组件中才可以使用, 其生命周期与 Activity 生命周期相关.

-- stop 与 destroy 状态 : Activity 暂停 或者 销毁的时候, 其内部嵌入的所有的 Fragement 也会执行 暂停 或者 销毁 操作;

-- 活动状态 : 只有当 Activity 处于活动状态的时候, 我们才能操作 Fragement;


Fragement 特征

-- Fragement 与 Activity 交互 : Fragement 调用 getActivity() 获取其 所嵌入的 Activity, Activity 获取 FragementManager 的findFragementById() 或 findFragementByTag() 获取 Fragement;

-- Activity 增删 Fragement : Activity 调用 Fragement 的 add(), remove(), replace() 等方法 添加 删除 替换 Fragement;

-- Fragement 与 Activity 对应关系 : 一个 Activity 中可以嵌入多个 Fragement, 一个 Fragement 可以嵌入多个 Activity;

-- 生命周期受 Activity 影响 : Fragement 的生命周期 受 Activity 生命周期控制;


Fragement 作用 Fragement 是为了 Android 中 平台电脑 UI 设计, 开发者不用设计 非常负责的 界面, 只需要设计好模块, 对UI 组件进行 分组模块化的设计和开发, 简化了 UI 组件;


Fragement 可复用性 : 同一个 app 应用, 可以在不同的 Activity 中加载同一个 Fragement;



2. Fragement 类 和 方法介绍


(1) Fragement 相关类介绍


Fragement 子类

-- DialogFragement : 对话框界面的 Fragement, 显示一个浮动的对话框, 这个对话框可以方便的与 Activity 进行交互, Activity 可以管理这个 Fragment;

-- ListFragement : 列表界面的 Fragement, 显示一个条目列表, 该列表可以设置一个适配器, 提供了许多管理 列表的函数;

-- PerformanceFragement : 选项设置界面的 Fragement, 该Fragment 创建 类似与 设置 应用程序时很管用;

-- WebViewFragement : WebView 界面的 Fragement;



(2) Fragement 生命周期相关方法介绍 


onCreate() :

onCreate(Bundle savedInstanceState)

-- 回调时机 : 在创建 Fragement 的时候回调;

-- 参数解析 : Bundle savedInstance, 用于保存 Fragment 参数, Fragement 也可以 重写 onSaveInstanceState(Bundle outState) 方法, 保存Fragement状态;

-- 执行的动作 : 获取 Frgement 显示的内容, 以及启动Fragment 传入的参数, 调用 getArguments() 获取键值对;


onCreateView()

onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);

-- 回调时机 : Fragement 绘制界面组件 的时候回调, 该方法返回 View, 这个View就是 Fragement 本身;

-- 参数解析 : inflater 布局加载器, 是上下文传入, 不用自己创建; container 加载组件的父容器;

-- 执行的操作 : 使用 inflate 布局加载器 加载布局文件, 并未组件设置显示的值;


onPause()

-- 回调时机 : Fragement 暂停的时候, 即进入后台的时候 回调;



3. Fragment 创建


Fragment 创建

-- 参数准备 : 创建一个 Bundle 对象, 并向其中设置参数 : 

Bundle bundle = new Bundle(); 
bundle.putString("key", "value");
-- 创建 Fragment 对象 : 使用 new MyFragment() 创建对象, 并 调用 myFragment.setArguments(bundle) 方法传入参数;

MyFragment myFragment = new MyFragment();
myFragment.setArguments(bundle);


Fragment嵌入Activity方式 : Fragment 添加到 Activity 中才能显示, 以下是将 Fragment 嵌入 Activity 的方式;

-- 布局文件嵌入 : 在布局文件中 使用 <Fragment /> 元素, 通过定义 android:name = "com.example.MyFragment" 属性指定 Fragment 类;

-- 代码方式嵌入 : 调用 FragmentTransaction 对象的 add() 方法向 Activity 中添加 Fragment;



4. Fragment 与 Activity 通信


Fragment 获取 Activity : 调用 Fragment 对象的 getActivity()方法, 即可获取 Fragment 嵌入的 Activity 对象;


Activity 获取 Fragment

-- Fragment 属性 : 在布局文件中, 可以为 <Fragment /> 元素指定 android:id 和 android:tag 属性;

-- 获取方法 : 调用 Activity 的 findFragmentById(int id) 或者 findFragmentByTag(String tag)方法;


Fragment 向 Activity 传递数据 : 将 Activity 当作接口子类对象, Fragment 中调用 Activity 中的接口方法;

-- Fragment 定义接口 : 在 Fragment 内部定义一个 Callback 接口;

-- Activity 实现该接口 : MyActivity extends Activity implement MyFragment.Callback;

-- Fragment 中获取该接口对象 : 在Fragment 中定义一个 Callback 全局变量, 然后在 onAttach(Activity activity) 方法中, 将 activity 强转为 Callback 对象

-- 调用接口方法 : 上面获取了 Callback 对象, 即Activity对象, 调用 Activity 中的 接口方法, 就能在 Fragment 中调用 Activity 对应的方法了;


Activity 向 Fragment 传递数据

-- 创建 Bundle 数据包 : 创建一个 Bundle 对象, 把要存放的键值对 放到这个对象中;

-- 设置 Bundle 对象给 Fragment : 调用 Fragment 对象的 setArguments(Bundle bundle) 方法, 将 Bundle 对象设置给 Fragment;



5. Fragment 事务管理


FragmentManager 功能 : FragmentManager 对象 可以通过 activity.getFragmentManager()获取;

-- 获取指定 Fragment : 通过 findFragmentById() 或者 findFragmentByTag() 方法获取指定 Fragment;

-- 弹出栈 : 通过调用 popBackStack(), 将 Fragment 从后台的 栈 中弹出;

-- 监听栈 : 通过调用 addOnBackStackChangeListener 注册监听器, 监听 后台栈变化; 


FragmentTransaction 对象获取途径 : 

-- 获取 FragmentManager 对象 : 调用 Activity 的 getFragmentManager() 获取 FragmentManager 对象;

-- 获取 FragmentTansaction 对象 : 调用 FragmentManager 对象的 beginTransaction() 方法获取 FragmentTransaction 对象;


FragmentTransaction(Fragment 事务)作用 : 对 Fragement 进行 增, 删 , 改 操作需要 FragmentTransaction 对象进行操作, 开启 这个事务, 获取 事务对象, 然后执行对 Fragment 的操作, 最后提交事务;

-- 开启事务 :  调用 Fragement 对象的 beginTransaction() 方法可以获取 FragementTransaction 对象;

-- 操作碎片 :  FragmentTransaction 对象 中 包含了 add(), remove(), replace() 等方法;

-- 提交操作 :  当执行完 Fragement 的操作之后, 可以调用 FragementTransaction 对象的 commit() 方法提交修改;


addToBackStack()方法作用 : 该方法是 FragementTransaction 的方法, 在提交事务前调用该方法, 可以将 事务中执行的操作 添加到 back 栈中, 用户按下 回退键, 修改过的 Fragement 会 回退到 事务执行之前的状态;



6. Fragment 生命周期




(1) Fragment 状态


活动状态 : Fragment 处于前台, 可见, 可以获取焦点;


暂停状态 : Fragment 嵌入的Activity 也处于暂停状态, 即 Fragment 处于后台, 可见, 失去焦点


停止状态 : Fragement 嵌入的 Activity 处于停止状态, 不可见, 失去焦点;


销毁状态 : Fragement 所在的 Activity 被销毁, 执行了 onDestroy() 方法, 此时 Fragement 被完全删除;



(2) Fragement 生命周期相关方法




红色方法 与 Activity 相对应, 蓝色方法 是 自身对应的方法, 棕色方法 单独对应;


onAttach() : 嵌入, Fragement 被嵌入到 Activity 时回调该方法, 只会调用一次;


onCreate() : 创建, Fragement 创建的时候回调该方法, 只会回调一次;


onCreateView() : 绘制, 在 Fragement 绘制的时候回调该方法, 该方法会返回 绘制的 View 组件;


onActivityCreated() : 界面创建, Fragement 所嵌入的 Activity 创建完成回调该方法;


onStart() : 启动, Fragement 启动时回调, 此时Fragement可见;


onResume() : 激活, Fragement 进入前台, 可获取焦点时激活;


onPause() : 暂停, Fragement 进入后台, 不可获取焦点时激活;


onStop() : 停止, Fragement 不可见时回调;


onDestroyView() : 销毁组件, 销毁 Fragement 绘制的 View 组件时回调;


onDestroy() : 销毁, 销毁 Fragement 回调;


onDetach() : 移除, Fragement 从 Activity 中移除的时候回调;



7. 代码示例 



(1) 需求分析


纵向手机屏幕 : 两个界面, 每个界面都有一个 Fragement,  一个Fragement显示新闻列表, 一个Fragement 显示新闻内容;

横向手机屏幕 : 一个界面, 两个Fragement, Fragement 显示内容与上面相同;



(2) 新闻标题 Fragment


存放新闻标题的 Fragment : NewsTittleFragment.java

package cn.org.octopus;import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;/*** 内部类 : * 		Callbacks接口* 	 	Fragement中维护该接口子类对象 * 		需要Activity实现该接口, 实现接口方法 * 		Activity 在onAttach()方法中传入; * * 方法简介 : *		重写生命周期的 11 个方法;*		onAttach() 方法中, 传入所嵌入的Activity, 并判断是否嵌入正确*		onCreate() 方法中, 创建  Fragement 中 ListView 的适配器, 并将适配器设置给 ListView*		onDetach() 方法中, 将  Callbacks 接口子类对象置空**		setChoiceMode() 设置ListView 的选择模式*		onListItemClick() ListView 的点击回调方法*	注意 Android *		*/
public class NewsTittleFragment extends ListFragment {private Callbacks activityCallback;			/* 从 onAttach()方法中传入的 Callbacks 接口子类, 由 Activity 强制转换而来 *//** 定义回调接口  * 	接口用法 : * 	1. 该 Fragement 所 Activity 实现该接口* 	2. 该 Fragement 中 维护一个 该接口子类, 即 Activity* 	3. 调用 Activity 接口子类的方法, 将数据传递给 Activity **/public interface Callbacks{public void onNewsSelect(int id);}/** Fragment 嵌入Activity */@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);System.out.println("onAttach");if ( ! ( activity instanceof Callbacks))System.out.println("Fragement in wrong Activity !");/* 为Activity中定义的Callbacks接口子类对象赋值 */activityCallback = (Callbacks) activity;}/** Fragement 创建* 	进行设置适配器操作 */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);System.out.println("onCreate");/* 为 ListFragment 创建适配器* 注意使用的是 Android 自带的布局, 在 sdk\platforms\android-10\data\res\layout 目录下*  */ListAdapter adapter = new ArrayAdapter<News>(getActivity(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, NewsContent.getInstance().news);/* 设置适配器 给 ListFragement */setListAdapter(adapter);}/** Fragment 绘制 */@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {System.out.println("onCreateView");return super.onCreateView(inflater, container, savedInstanceState);}/** Activity 创建完毕 */@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);System.out.println("onActivityCreated");}/** Fragement 进入可视状态 */@Overridepublic void onStart() {super.onStart();System.out.println("onStart");}/** Fragement 进入激活状态 */@Overridepublic void onResume() {super.onResume();System.out.println("onResume");}/** Fragement 进入暂停状态 */@Overridepublic void onPause() {super.onPause();System.out.println("onPause");}/** Fragement 进入停止状态 */@Overridepublic void onStop() {super.onStop();System.out.println("onStop");}/** 销毁 Fragement 显示组件 */@Overridepublic void onDestroyView() {super.onDestroyView();System.out.println("onDestroyView");}/** 销毁 Fragement */@Overridepublic void onDestroy() {super.onDestroy();System.out.println("onDestroy");}/** 将 Fragement 从 Activity 中删除 */@Overridepublic void onDetach() {super.onDetach();System.out.println("onDetach");activityCallback = null;}/*** 列表对象被点击之后回调的方法*/@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {super.onListItemClick(l, v, position, id);activityCallback.onNewsSelect((int) id);}/** 设定选择模式, 该列表默认不能选择, 可以设置为不能选择, 单选 和 多选* 	ListView.CHOICE_MODE_NONE		不能选择* 	ListView.CHOICE_MODE_SINGLE		单选* 	ListView.CHOICE_MODE_MULTIPLE	多选*  */public void setChoiceMode(int choiceMode) {getListView().setChoiceMode(choiceMode);}}



(3) 新闻内容的 Fragment


存放新闻内容的 Fragment : NewsContentFragement.java;

package cn.org.octopus;import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;public class NewsContentFragement extends Fragment {/* Bundle的key */public static final String TAG_NEWS_ID = "cn.org.octopus.news.tittle";private News news;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 校验 参数中是否包含 TAG_NEWS_ID 键值*/boolean isIllegal = getArguments().containsKey(TAG_NEWS_ID);if(isIllegal){/* 如果包含 TAG_NEWS_ID 键值, 就会去键对应的 id */int id = getArguments().getInt(TAG_NEWS_ID);/* 从 NewsContent 单例对象中的 map 集合中获取 news 对象 */news = NewsContent.getInstance().news_map.get(id);}}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {/* 加载布局文件 */View rootView = inflater.inflate(R.layout.fragment_news_content, container, false);/* 获取新闻标题组件 */TextView news_content_tittle = (TextView) rootView.findViewById(R.id.news_content_tittle);/* 获取新闻内容组件 */TextView news_content_content = (TextView) rootView.findViewById(R.id.news_content_content);if(null != news){/* 设置新闻标题 */news_content_tittle.setText(news.getTittle());/* 设置新闻内容 */news_content_content.setText(news.getContent());}return rootView;}}



(4) 新闻内容存储相关代码


新闻实体类

package cn.org.octopus;public class News {private int id;			//新闻序号private String tittle;	//新闻标题private String content;	//新闻内容/** 构造方法  */public News(int id, String tittle, String content) {super();this.id = id;this.tittle = tittle;this.content = content;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTittle() {return tittle;}public void setTittle(String tittle) {this.tittle = tittle;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}/* 这里只返回标题, 是为了适配 ListFragement 时使用 */@Overridepublic String toString() {
//		return "News [id=" + id + ", tittle=" + tittle + ", content=" + content
//				+ "]";return tittle;}}


新闻数据

package cn.org.octopus;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class NewsContent {/* 单例模式* 1. 私有 静态 本类成员变量* 2. 私有 构造 函数* 3. 公共 静态 函数, 检查本类成员变量是否为null, 返回本类成员变量 */private static NewsContent newsContent;public List<News> news;public Map<Integer, News> news_map;private NewsContent(){news = new ArrayList<News>();news_map = new HashMap<Integer, News>();News news1 = new News(0, "郭振玺敛财术", "7月30日,央视纪录频道CCTV-9总监刘文被带走。据相关报道,刘文被带走的原因是 “发现在纪录片对外采购上有财务问题”,另外,在一些高收视率的纪录片创作上,“涉嫌与隐性的植入广告有关的利益交换”。");News news2 = new News(1, "朝鲜新版5000朝元新钞无金日成头像", "韩国网刊《每日朝鲜》8月1日报道,已经开始流通的5000朝元新钞并未印金日成肖像,意味金日成肖像已从朝鲜货币上暂时消失。 旧版朝鲜5000元纸币上印有金日成头像。");News news3 = new News(2, "美国医生感染埃博拉", "菲律宾卫生部部长恩里克·奥尼亚说,目前菲律宾尚无埃博拉疫情。卫生部已通报地方卫生部门,一旦发现返菲海外劳工出现感染埃博拉病毒早期症状,立即对患者实行隔离治疗。卫生部还要求近期即将从海外回国的劳工如出现发烧、头痛、关节和肌肉疼痛、喉咙痛等症状,在回国前应获得所雇佣国家卫生部门的无感染证明,以避免埃博拉病毒传入菲律宾。");news.add(news1);news.add(news2);news.add(news3);news_map.put(news1.getId(), news1);news_map.put(news2.getId(), news2);news_map.put(news3.getId(), news3);}/*** 判断成员变量 是否为null * 	如果不为null, 直接返回;* 	如果为null, 先创建在返回;*/public static NewsContent getInstance() {if(newsContent != null)return newsContent;elsereturn new NewsContent();}}



(5) 主界面 Actiity 代码


主界面代码 : MainActivity.java

package cn.org.octopus;import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import cn.org.octopus.NewsTittleFragment.Callbacks;public class MainActivity extends Activity implements Callbacks {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 加载布局文件, 这个布局文件中有一个 Fragment, 会自动加载该 Fragmet */setContentView(R.layout.activity_main);}/** * 实现的 Callbasks 接口的方法, * 当 NewsTittleFragement 中的 ListView 被点击的时候 回调 * */@Overridepublic void onNewsSelect(int id) {/* 创建 Bundle 对象, Activity 传递给 Fragment 的参数需要靠该对象进行传递 */Bundle arguments = new Bundle();/* 封装数据到 Bundle 对象中, 注意提前定义好键值 */arguments.putInt(NewsContentFragement.TAG_NEWS_ID, id);/* 创建 Fragment 对象 */NewsContentFragement fragement = new NewsContentFragement();/* 将 Activity 要传递的数据 传递给 Fragment 对象 */fragement.setArguments(arguments);/* 获取FragmentManager 对象 */FragmentManager manager = getFragmentManager();/* 开启事务, 获取事务 */FragmentTransaction transaction =  manager.beginTransaction();/* 在事务中进行替换操作 */transaction.replace(R.id.news_content, fragement);/* 提交操作 */transaction.commit();}}


(6) AndroidManifest.xml 配置文件


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.org.octopus"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="15"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!-- 设置屏幕方向 android:screenOrientation : unspecified : 默认值, 系统自动判定方向landscape : 横屏显示portrait : 竖屏显示user : 用户当前首选方向behind : 与 之前的 Activity 方向一致;sensor : 由物理传感器决定nosenser : 忽略物理传感器感应--><activityandroid:name="cn.org.octopus.MainActivity"android:label="@string/app_name" android:screenOrientation="landscape"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>


(7) 执行结果


跟踪的 Fragment 生命周期回调函数打印的结果

I/System.out( 8604): onAttach
I/System.out( 8604): onCreate
I/System.out( 8604): onCreateView
I/System.out( 8604): onActivityCreated
I/System.out( 8604): onStart
I/System.out( 8604): onResume
I/System.out( 8604): onPause
I/System.out( 8604): onStop
I/System.out( 8604): onDestroyView
I/System.out( 8604): onDestroy
I/System.out( 8604): onDetach

界面执行结果





.


8. 出错处理


(1) 引用 不用包中的 Fragment


引用 android.app.ListFragment, 不会出现错误, 而 引用 android.support.v4.app.ListFragment 类会出现如下错误;


错误

08-06 22:17:12.537: E/AndroidRuntime(3751): FATAL EXCEPTION: main
08-06 22:17:12.537: E/AndroidRuntime(3751): java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.org.octopus/cn.org.octopus.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread.access$700(ActivityThread.java:157)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.os.Looper.loop(Looper.java:176)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread.main(ActivityThread.java:5319)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at java.lang.reflect.Method.invoke(Method.java:511)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at dalvik.system.NativeStart.main(Native Method)
08-06 22:17:12.537: E/AndroidRuntime(3751): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:360)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Activity.setContentView(Activity.java:1932)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at cn.org.octopus.MainActivity.onCreate(MainActivity.java:13)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Activity.performCreate(Activity.java:5326)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	... 11 more
08-06 22:17:12.537: E/AndroidRuntime(3751): Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class cn.org.octopus.NewsTittleFragment that is not a Fragment
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Fragment.instantiate(Fragment.java:584)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Fragment.instantiate(Fragment.java:560)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.app.Activity.onCreateView(Activity.java:4908)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)
08-06 22:17:12.537: E/AndroidRuntime(3751): 	... 21 more
08-06 22:17:12.537: E/AndroidRuntime(3751): Caused by: java.lang.ClassCastException
08-06 22:17:12.537: E/AndroidRuntime(3751): 	... 25 more


(2) ListView 适配器设置错误


ListView 适配器引用的 组件, 必须是已经加载过的, 通过 onCreate()中的 setContentView()方法加载, 或者通过 LayoutInflater 进行加载;


错误

08-06 22:39:22.139: W/dalvikvm(4413): threadid=1: thread exiting with uncaught exception (group=0x40dc0930)
08-06 22:39:22.139: E/AndroidRuntime(4413): FATAL EXCEPTION: main
08-06 22:39:22.139: E/AndroidRuntime(4413): android.content.res.Resources$NotFoundException: Resource ID #0x7f080001 type #0x12 is not valid
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.content.res.Resources.loadXmlResourceParser(Resources.java:3033)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.content.res.Resources.getLayout(Resources.java:1722)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:395)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.AbsListView.obtainView(AbsListView.java:2603)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ListView.makeAndAddView(ListView.java:1840)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ListView.fillDown(ListView.java:681)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ListView.fillFromTop(ListView.java:742)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.ListView.layoutChildren(ListView.java:1661)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.AbsListView.onLayout(AbsListView.java:2426)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1694)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1552)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.View.layout(View.java:14905)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewGroup.layout(ViewGroup.java:4601)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2213)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2027)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1237)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5162)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.Choreographer.doCallbacks(Choreographer.java:591)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.Choreographer.doFrame(Choreographer.java:561)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.os.Handler.handleCallback(Handler.java:725)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.os.Looper.loop(Looper.java:176)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at android.app.ActivityThread.main(ActivityThread.java:5319)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at java.lang.reflect.Method.invoke(Method.java:511)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-06 22:39:22.139: E/AndroidRuntime(4413): 	at dalvik.system.NativeStart.main(Native Method)


9. Fragement 复用问题


需求 : 在手机竖屏的时候, 新闻列表 和 新闻内容 在两个 Activity 中, 横屏的时候, 在一个 Activity 中;



(1) 根据不同的环境加载不同的布局


定义实际引用的资源 : 在 Java 代码中引用资源的时候, 会到 values 中查询, 是否有定义资源文件, 如果有, 优先按照该定义加载指定资源文件;

-- 定义方式 : 下面的定义, 如果代码中引用 R.layout.activity_main, 符合条件的话, 使用 R.layout.activity_main_land 布局文件;

<resources><item type="layout" name="activity_main">@layout/activity_main_land</item>
</resources>
-- 属性说明 : type 资源的类型, name 资源名称;


(2) 判断加载的布局文件


判断的依据 : 根据 两个布局文件的差异, 任意查找一个组件, 或者定义一个 不占位置的组件, 来进行判定;

		/* 查看加载的是哪个文件, 如果文件中包含 R.id.news_content_content 组件, 就说明现在是横屏的 */isLand = findViewById(R.id.news_content) != null;


(3) MainActivity 代码差异


package cn.org.octopus;import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import cn.org.octopus.NewsTittleFragment.Callbacks;public class MainActivity extends Activity implements Callbacks {private boolean isLand;		/* 标识是否是横屏 */@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 加载布局文件, 这个布局文件中有一个 Fragment, 会自动加载该 Fragmet */setContentView(R.layout.activity_main);/* 查看加载的是哪个文件, 如果文件中包含 R.id.news_content_content 组件, 就说明现在是横屏的 */isLand = findViewById(R.id.news_content) != null;}/** * 实现的 Callbasks 接口的方法, * 当 NewsTittleFragement 中的 ListView 被点击的时候 回调 * */@Overridepublic void onNewsSelect(int id) {/* 如果是横屏的情况, 两个 Fragement 都在一个界面中  */if(isLand){/* 创建 Bundle 对象, Activity 传递给 Fragment 的参数需要靠该对象进行传递 */Bundle arguments = new Bundle();/* 封装数据到 Bundle 对象中, 注意提前定义好键值 */arguments.putInt(NewsContentFragement.TAG_NEWS_ID, id);/* 创建 Fragment 对象 */NewsContentFragement fragement = new NewsContentFragement();/* 将 Activity 要传递的数据 传递给 Fragment 对象 */fragement.setArguments(arguments);/* 获取FragmentManager 对象 */FragmentManager manager = getFragmentManager();/* 开启事务, 获取事务 */FragmentTransaction transaction =  manager.beginTransaction();/* 在事务中进行替换操作 */transaction.replace(R.id.news_content, fragement);/* 提交操作 */transaction.commit();}else{	/* 竖屏的情况, 需要开启 Activity */System.out.println("isLand : " + isLand);Intent intent = new Intent(getApplicationContext(), NewsContentActivity.class);/* 通过 Intent 的 Bundle 对象传递参数 */intent.putExtra(NewsContentFragement.TAG_NEWS_ID, id);startActivity(intent);}}}


(4) 新增了 NewsContentActivity 


package cn.org.octopus;import android.app.Activity;
import android.os.Bundle;public class NewsContentActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 设置布局文件 */setContentView(R.layout.activity_news_content);/* 创建 Fragement */NewsContentFragement fragement = new NewsContentFragement();/* 创建绑定的数据 */Bundle bundle = new Bundle();/* 从Activity 获取 启动该 Activity 的 Intent */int id = getIntent().getIntExtra(NewsContentFragement.TAG_NEWS_ID, 0);bundle.putInt(NewsContentFragement.TAG_NEWS_ID, id);/* 设置数据给 Fragment */fragement.setArguments(bundle);/* 开启事务 操作 Fragement 并提交 */getFragmentManager().beginTransaction().add(R.id.news_content, fragement).commit();}
}



(5) 新增 或 修改的布局文件


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><fragment android:id="@+id/tittle_fragment"android:name="cn.org.octopus.NewsTittleFragment"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"/></LinearLayout>


activity_main_land.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" android:orientation="horizontal"android:divider="?android:attr/dividerHorizontal"android:showDividers="middle"><!--资源引用方式解析 :  @+id : 定义一个 id 值, 用于识别组件@id : 引用 id 值代表的组件@anroid:type : 引用 Android 内部的资源, type 指的是 drawable string 等资源类型?android:attr : 引用 Android 内部的样式分割线解析 : 分割线资源 : 在 android:divider 属性中引入样式, 这里通过 ?android:attr 引入一个 android 的自定义样式分割线样式 : android:showDivider 属性中设置, none 不显示分割线, beginning 在开始处显示, end 在结尾显示, middle 中间显示--><fragment android:id="@+id/tittle_fragment"android:name="cn.org.octopus.NewsTittleFragment"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"/><FrameLayout android:id="@+id/news_content"android:layout_width="0dp"android:layout_weight="3"android:layout_height="match_parent"/></LinearLayout>


activity_news_content.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/news_content"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" />



(6) 执行效果


竖屏



横屏







作者 : 韩曙亮

转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 一款c语言实现的赛车游戏

    博主学习c语言已经有一段时间了,出于对自己学习检验的目的,自制了一款c语言赛车游戏。由于本质是检验和尝试,所以并没有注重游戏的界面。下文是开发文档,在博主的github网页可以下载源码,注意本项目使用工程的方式开发,打开也请使用打开一个项目工程的方式。找到c语言公路…...

    2024/4/28 13:55:47
  2. winform程序打包EXE三种方式

    1.利用VS自带的打包工具教程:http://www.cnblogs.com/iiwen/p/5310184.html优点:微软自带的,而且大部分人都是用的这种发布方式,具有安装步骤。更专业缺点:使用步骤比较繁琐,而且安装文件的话需要其他的配置文件,需要的文件比较多2.采用右键发布该项目优点:使用步骤很简…...

    2024/4/28 11:21:23
  3. linux驱动子系统--TTY

    tty目录下的8250指的是intel的8250系列串口芯片驱动目录;8250系列包括8250,16450,16450A等。【struct uart_port解析】 flag 串口属性标志,以下是解释 #define UPF_FOURPORT 4端口串口卡,8250系列 #define UPF_SAK …...

    2024/4/28 19:49:43
  4. 字符串/数组的截取

    字符串的截取方法 除第一种方法返回的是数组外,其他的都是字符串,所有方法都不改变原字符串。 1、split(); 实用一个置顶的分割符把字符串分割存储到数组,返回的是数组。 str.split(separator, howmany); separator: 必需。字符串或正则表达式,从该参数指定的地方分割。若…...

    2024/4/28 3:23:00
  5. 从零开始制作2048游戏

    该游戏基于lae开发平台开发,lua代码300多行即可。下载Game2048,用lae打开Game2048.ui文件,可以看到ui结构、设置,甚至在工具中运行测试 游戏代码下载地址:https://github.com/ouloba/Game2048.git 游戏代码下载地址(国内):https://pan.baidu.com/s/1o8COrqy lae下载地址:ht…...

    2024/4/28 19:59:46
  6. Android中的Preference结构的设计与实现

    本文主要通过分析源代码来分享Preference的设计和实现方式,让开发者们在今后更加顺手地使用和扩展Preference类,或者在设计其他类似的界面和功能时可以提供参考帮助。 Preference概览 Android的设置界面本质上就是ListView:PreferenceActivity是继承了ListActivity;而3.0以…...

    2024/4/25 16:22:00
  7. JS截取字符串函数详解

    一、函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=”jpg|bmp|gif|ico|png”;arr=theString.split(”|”);//arr是一个包含字符值”jpg”、”bmp”、”gif”、”ico”和”png”的数组二、函数:John() 功能:使用您选择的分隔符将一个数组合…...

    2024/4/28 0:30:37
  8. 打造免费的游戏开发环境

    打造免费的游戏开发环境目前,Windows用户占了全大多数,因此开发的游戏运行环境,就肯定是Windows了。而在windows开发中,开发工具的选择,肯定是微软的比较好。而游戏开发平台,最好的又是C++了,因为Windows和DirectX组件的开发,就是基于C和C++的。好了,现在就教你打…...

    2024/4/20 18:30:13
  9. U转串口驱动安装

    在装有Win7 32位系统的台式机上先卸载旧驱动,再重新安装。对设备管理器里的U转串口设备从本地更新驱动,选择下图文件系统弹出红色提示框(是否安装XXXX驱动),选择安装,随后该设备由无法启动变为工作正常。在Win8 64位系统上安装驱动后,出现下图情况,设备无法启动(错误代…...

    2024/4/21 8:28:36
  10. PreferenceActivity 安卓官方文档(译文)

    PreferenceActivity 安卓开发者译文类概述这是一个向用户展示 preferences 的Activity的扩展类. 在 HONEYCOMB (android4.0)之前的版本,这个类仅仅只向用户展示单一preference集;这个功能在之后的版本被放在 PreferenceFragment 类中.如果你想你的 PreferenceActivity 仅仅保…...

    2024/4/21 8:28:34
  11. vb.net程序打包发布

    本篇文章主要介绍的是我所做的机房收费系统VB.NET版的打包发布过程,全文基本由图片组成,文字其实也不少。首先介绍下,写这篇文章之前,我参看过的文章。vb.net 打包发布 ,Winform打包发布图解,VB.NetWinform程序的简单打包和部署--<机房收费系统> . OK,编下号博客…...

    2024/4/21 8:28:34
  12. 在微信公众平台做HTML 5游戏的一些经验

    在微信公众平台做HTML 5游戏的一些经验时间:2013-08-22 英特尔intel.com 程大伟<iframe id="cproIframe_u1234" width="300" height="250" src="http://pos.baidu.com/acom?adn=3&at=231&aurl=&cad=0&ccd=24&cec=G…...

    2024/4/21 8:28:33
  13. javascript两种截取字符串的方法

    JS提供两个截取字符串的方法,分别是:slice()和substring()slice和substring都可以接受一个或两个参数,第1个参数是获取要截取的字符串的直始位置,第2个参数如果不为空则是获取要截取的字符串的结束位置的前一位(也就是说获取的终点位置不在返回值内),为空表示截取到整个字符串…...

    2024/4/27 0:08:58
  14. Linux 程序设计学习笔记----终端及串口编程及实例应用

    转载请注明出处,http://blog.csdn.net/suool/article/details/38385355。 部分内容类源于网络。 终端属性详解及设置 属性 为了控制终端正常工作,终端的属性包括输入属性、输出属性、控制属性、本地属性、线路规程属性以及控制字符。 其在系统源代码的termios.h中定义(具体的…...

    2024/4/21 8:28:30
  15. Visual Studio 2017中如何打包exe安装文件

    注意:阅读本篇文章前,请先按照 https://blog.csdn.net/DonetRen/article/details/88185150 的步骤添加相应扩展,并创建安装项目创建完Windows安装项目之后,接下来讲解如何制作Windows安装程序。一个完整的Windows安装程序通常包括项目输出文件、内容文件、桌面快捷方式和注…...

    2024/4/21 8:28:29
  16. 课程 4: 偏好

    这节课是 Android 开发(入门)课程 的第三部分《访问网络》的最后一节课。这节课为 Quake Report App 添加一个偏好 (Preference) 页面,入口放在应用栏,使应用能够根据用户的偏好修改查询地震信息的最小震级,以及按震级大小或时间顺序排列显示地震信息列表。 关键词:Share…...

    2024/4/21 8:28:28
  17. 游戏引擎之寒霜引擎

    Frostbite引擎(Frostbite Engine),是EA DICE开发的一款3D游戏引擎,主要应用于2000年代晚期的战地系列游戏。该引擎从2006年起开始研发,第一款使用寒霜引擎的游戏《战地:叛逆连队》在2008年上市。多平台 Frostbite引擎支持多种平台的后端。在Xbox 360、Microsoft Windows上…...

    2024/4/21 8:28:27
  18. 如何让打包的C++安装程序以管理员身份在Win7下运行

    问题描述:使用VS2010开发的C++项目,使用inno打包后的安装程序,安装在系统盘后,在桌面创建的快捷方式必须右键以管理员身份才能正常运行,否则双击运行程序出现异常。解决方法:在VS2010解决方案资源管理器中右键启动项目->属性,弹出 个工程属性页,定位到链接器->清…...

    2024/4/21 8:28:26
  19. JS中字符串截取与php中字符串截取函数总结

    1. JS中关于字符串截取的函数var stringObj = "123abcstring";(1) substr()函数stringObj.substr(start, length): 表示从start位置开始,截取length长度(指定长度)的子字符串。例如: stringObj.substr(1, 3); // 返回值为:“23a”(2) substring()函数string…...

    2024/4/21 8:28:25
  20. linux串口转TCP程序

    include”test.h”include”modbus.h”define BUFFER_SIZE 29int ret; modbus_t *mb; int16_t tab_reg[32]={0}; //初始化串口端口号啊 void ComInit() { mb = modbus_new_rtu(“/dev/ttySAC3”,19200,’N’,8,1);//open port modbus_set_slave(mb,1);//set slave addre…...

    2024/4/21 8:28:24

最新文章

  1. springboot全局处理sql异常

    springboot全局异常处理&#xff0c;不会去拦截sql异常&#xff0c;导致错误返回到前端&#xff0c;&#xff0c;将sql中的字段暴露出来&#xff0c;很危险&#xff0c;&#xff0c; 因为ExceptionHandler 只认我们注入类的名称&#xff0c;&#xff0c;而SQLException不在里面…...

    2024/4/28 20:00:01
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 开启 Keep-Alive 可能会导致http 请求偶发失败

    大家好&#xff0c;我是蓝胖子&#xff0c;说起提高http的传输效率&#xff0c;很多人会开启http的Keep-Alive选项&#xff0c;这会http请求能够复用tcp连接&#xff0c;节省了握手的开销。但开启Keep-Alive真的没有问题吗&#xff1f;我们来细细分析下。 最大空闲时间造成请求…...

    2024/4/23 4:15:19
  4. mysql故障及解决分析

    目录 MySQL 单实例故障排查 MySQL 单实例故障排查 &#xff08;1&#xff09;故障现象 1 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /data/mysql/mysql.sock (2) 问题分析&#xff1a;以上这种情况一般都是数据…...

    2024/4/26 1:07:01
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57