Samples/Notepad


Android Samples-Notepad分析の一つ
このNotepadアプリケーションは3つのActivityを含む
1.現在適用されているすべての日記、すなわち日記リストを表示し、ListActivityから継承し、アプリケーションが起動したホームページ
Activityには、次の項目があります.
コンテキストメニュー:ある行を長押しして対応するメニューをポップアップします.メニューにはタイトルと削除オプションが含まれています.主に以下の方法で実現されます.
onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo),onContextItemSelected(MenuItem item)
 
コンテキストメニューをonCreate()にバインドします.バインド方法は次のとおりです.
getListView().setOnCreateContextMenuListener(this);  
メニュー:現在のListActivityにアイテムが選択されていない場合、1つの追加メニューのみをクリックしてコンテンツ編集ページにジャンプ
 startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));
Action+uri方式でジャンプ
 
現在のListActivityに選択項目がある場合は、2つのメニュー(現在のコンテンツの編集、現在のタイトルの編集)+追加メニューが追加されます
ここでは、動的追加テクノロジーを使用します.具体的なコードは次のとおりです.
Intent[] specifics = new Intent[1];
specifics[0] = new Intent(Intent.ACTION_EDIT, uri);
MenuItem[] items = new MenuItem[1];
//action+dataをとる
Intent intent = new Intent(null,uri);
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
//category+dataを取る
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, 
new ComponentName(this, NotepadListActivity.class), specifics, intent, 0, items);
 
上記のコードは2つの適合方式を採用して、onPrepareOptionsMenu(Menu menu)の中で関連処理を行って、もしmanifestならば.xmlにマッチングという2つの方法があると、対応するメニューが生成され、intent-filterのlabelから名前が取られ、マッチングに成功しなければ、対応するメニューは生成されません.
 
2.個別日記の内容編集ページ、Activityから引き継ぐ
現在のActivityでは編集コントロールがカスタマイズされており、EditTextから継承されています.
onCreate()では現在のactionを判断し、編集は挿入処理方式とは異なり、actionが挿入の場合はContentProviderに事前に挿入操作を行い、対応するデータを作成し、対応するUriを返し、データの保存はonPauseで処理し、対応するUriに基づいてUpdate操作を行う
 
このActivityにもダイナミックメニューの処理があり、actionが編集になると、タイトル編集メニューが動的に追加されます
 
3.個々の日記のタイトル編集ページ、Activityから継承
現在のタイトルを編集します.このActivityのテーマはDialogで、データの保存もonPauseにあります.
 
 
この事例はContentProviderの使用に対して与えられた簡単なdemoである.
ContentProviderは抽象クラスです.継承するには、次のような抽象メソッドをすべて実装する必要があります.
 
The primary methods that need to be implemented are: onCreate()  which is called to initialize the provider query(Uri, String[], String, String[], String)  which returns data to the caller insert(Uri, ContentValues)  which inserts new data into the content provider update(Uri, ContentValues, String, String[])  which updates existing data in the content provider delete(Uri, String, String[])  which deletes data from the content provider getType(Uri)  which returns the MIME type of data in the content provider
ダイナミックメニューの追加に対してdataデータとmanifest.xmlマッチングの場合、getType(Uri)によって対応するMIMEデータが得られる.このデータは開発者自身が定義する必要があり、フォーマットは以下の通りである:vnd.android.cursor.dir/?     vnd.android.cursor.item/?
 
 
简単にこの事例に対する本人の理解を书いて、面と向かって住むことができなくて、理解しない地方があって、私达は交流することができます!ありがとう!