編輯:關於android開發
分類:C#、Android、VS2015;
創建日期:2016-03-05
這一章我們介紹“共享存儲和內容提供程序”的基本用法。
在前面章節的示例中,並沒有對每個例子都添加IntentFilter,但是,當你按章節順序一步一步學到這一章時,你應該已經意識到下面的問題:
(1)讓每個例子都接收MainActivity的通知可能不合適,這是因為每個例子都是獨立的模塊,它和主界面(MainActivity)可能並沒有什麼直接的聯系。
(2)或許你還可能想在你設計的每個頁面中都嵌入一個共同的部分,而這個“共同”的部分只需要設計一次即可,就像WPF或者Web中你希望嵌入一個所有頁面都公用的某個一次性設計的模板一樣,此時就可以用Fragment來實現。
下面分別介紹如何解決這兩個問題。
1、問題1的解決辦法
解決第(1)個問題的辦法很簡單,就是在你每個獨立模塊的主Activity中都加入下面的過濾器特性聲明:
[IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { ch.MyDemosCategory })]
具體實現見本章的示例。
其中,ch.MyDemosCategory 是在ch.cs文件中定義的一個常量。
由於數組中的每個常量都是字符串,所以代碼中的new[]也可以寫為new string[]。
另外,把MainActivity中創建的列表也保存到新添加的ch.cs這個文件中:
using System.Collections.Generic; namespace MyDemos.SrcDemos { public static class ch { //給整個項目定義一個完全一致的Intent過濾器分類 public const string MyDemosCategory = "cnblogs.com.rainmj.MyDemos"; public static IList<Chapter> CreateChItems() { IList<Chapter> chItems = new List<Chapter>(); chItems.Add(new Chapter() { ChapterName = "第1章 開發環境安裝和配置", ChapterItems = new ChItem[] { new ChItem {type=null, Title="本章無示例", Desc = "" }, } }); ……(後面的代碼不再粘貼了) } } }
這樣一來,MainActivity.cs文件中的代碼就顯得干淨整潔了。
從這一章開始,後面章節示例的主界面中所有與MainActivity.cs相關的代碼也都將改為在ch.cs文件中添加。
2、問題2的解決辦法
前面我們講過,Android的布局元素和WPF相比,前者的Fragment元素就相當於後者的Frame元素。既然這樣,當然也可以單獨設計一個頁面,然後在需要時將該頁面作為一個Fragment來看待,把它嵌入到你希望嵌入的頁面中就行了。
下面是MyDemosFragment.axml文件的代碼:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="www.cnblogs.com/rainmj/" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="14dp" android:textColor="#FF267F00" android:text android:gravity="center_horizontal" android:paddingBottom="5dp" /> <View android:layout_width="match_parent" android:layout_height="1dip" android:background="#0000FF" android:layout_marginBottom="5dp" /> </LinearLayout>
下面是項目根目錄下MyDemosFragment.cs文件的代碼,該文件相當於MVC中的控制器,用於將MyDemosFragment.axml文件添加到引用它的頁面中:
using Android.App; using Android.OS; using Android.Views; namespace MyDemos { public class MyDemosFragment : Fragment { public override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); } public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.Inflate(Resource.Layout.MyDemosFragment, container, true); } } }
完成上面的工作後,要將MyDemosFragment.axml作為另一個頁面的一部分,比如將其作為ch1901Main.axml文件的一部分,只需要在ch1901Main.axml文件中的合適位置中添加下面的代碼即可:
<fragment android:name="MyDemos.MyDemosFragment" android:tag="mydemos" android:layout_width="match_parent" android:layout_height="wrap_content" />
從這一章張開始,後面的所有示例頁面都將嵌入這一部分。
另外,Main.axml文件也將相關的部分替換為這段代碼了。
1、運行截圖
2、ch.cs文件中與本章示例相關的代碼
chItems.Add(new Chapter() { ChapterName = "第19章 共享存儲和內容提供程序", ChapterItems = new ChItem[] { new ChItem { type=typeof(ch1901MainActivity), Title="例19-1 SharedPreferences基本用法", Desc = "演示SharedPreferences的基本用法" }, new ChItem { type=typeof(ch1902MainActivity), Title="例19-2 ShareActionProvider基本用法", Desc = "演示共享操作提供程序(ShareActionProvider)的基本用法" }, new ChItem { type=typeof(ch1903MainActivity), Title="例19-3 ContentProvider基本用法", Desc = "演示內容提供程序(ContentProvider)及其相關類的基本用法" }, } });
Android 微信第三方登錄(個人筆記),android第三方今天在寫微信登錄,花了半天時間搞定、然後寫下自己的筆記,希望幫助更多的人。。。歡迎各位指教。
Android 實現 IOS相機滑動控件,androidios IOS相比於Android,動畫效果是一方面優勢,IOS相機切換時滑動的動畫很不錯,看著是有
Android中AsyncTask的使用詳解 在Android中我們可以通過Thread+Handler實現多線程通信,一種經典的使用場景是:在新線程中進行耗時操作,
Android特效專輯(十二)——如何仿支付寶咻一咻功能實現波紋擴散特效 Android特效專輯(十二)——仿支付寶咻一咻功能實現波紋擴散特效