編輯:關於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 微信第三方登錄(個人筆記),android第三方今天在寫微信登錄,花了半天時間搞定、然後寫下自己的筆記,希望幫助更多的人。。。歡迎各位指教。
Android 實現 IOS相機滑動控件,androidios
Android 實現 IOS相機滑動控件,androidios IOS相比於Android,動畫效果是一方面優勢,IOS相機切換時滑動的動畫很不錯,看著是有
Android中AsyncTask的使用詳解
Android中AsyncTask的使用詳解 在Android中我們可以通過Thread+Handler實現多線程通信,一種經典的使用場景是:在新線程中進行耗時操作,
Android特效專輯(十二)——如何仿支付寶咻一咻功能實現波紋擴散特效
Android特效專輯(十二)——如何仿支付寶咻一咻功能實現波紋擴散特效 Android特效專輯(十二)——仿支付寶咻一咻功能實現波紋擴散特效