API Demosのcom.example.android.aips
6405 ワード
com.example.android.aipsパッケージには2つのクラスファイルがあります.ApiDemosとApiDemosApplicatioです.この2つのクラスは主にDemo全体を構築するために使用されています.
ApiDemosはandroidから受け継いだ.app.ListActivity、明らかにリストビュー
ApiDemosApplicatioはandroidから継承する.app.Applicationは、App全体を制御するためのものです
------------------------------------分割線--------------------------------------------
ListActivityは、配列やデータ・カーソルなどのデータがバインドされたリスト・アイテムを示し、アイテムにイベントをバインドすることができます.詳細リファレンス
http://developer.android.com/reference/android/app/ListActivity.html
Applicationは、グローバルアプリケーションステータスを取得するための最上位クラス(Base Class)の複写です.この例では、<アプリケーションandroid:name="ApiDemosApplication"などのアプリケーションをカスタマイズできます.
詳細はこちら
http://developer.android.com/reference/android/app/Application.html
------------------------------------分割線--------------------------------------------
次はcom.example.android.aips.ApiDemosクラス:
まず、onCreateメソッドを書き直します.コードは次のとおりです.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Intent
* Intent: Activity Intent , ‘ Intent’
*/
Intent intent = getIntent();
/**
* Path path , Intent
* Demo , DEMO , (App|Content…Views)
* App (Activity|Alarm…Menu) Activity (Animation…Wallpaper)
* App—>ActivityAnimation Animation
* Activity android:label App/Activity/Animation,
* Demo Activity : Demo path , * +“/…” Activity browseActivity * getData
*/
String path = intent.getStringExtra("com.example.android.apis.Path");
if (path == null) {
path = "";
}
/**
* SimpleAdapter ListView
*/
setListAdapter(new SimpleAdapter(this, getData(path),android.R.layout.simple_list_item_1, new String[] { "title" },new int[] { android.R.id.text1 }));
/**
*
*/
getListView().setTextFilterEnabled(true);
}
protected List<Map<String, Object>> getData(String prefix) {
List<Map<String, Object>> myData = new ArrayList<Map<String, Object>>();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
PackageManager pm = getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
if (null == list){
return myData;
}
String[] prefixPath;//
String prefixWithSlash = prefix;//
if (prefix.equals("")) {
prefixPath = null;
} else {
prefixPath = prefix.split("/");
prefixWithSlash = prefix + "/";
}
int len = list.size();
Map<String, Boolean> entries = new HashMap<String, Boolean>();
for (int i = 0; i < len; i++) {
ResolveInfo info = list.get(i);
Log.i("TEST",info.toString());
CharSequence labelSeq = info.loadLabel(pm);
String label = ((labelSeq != null) ? labelSeq.toString(): info.activityInfo.name);
if (prefixWithSlash.length() == 0 || label.startsWith(prefixWithSlash)) {
String[] labelPath = label.split("/");
String nextLabel = (prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]);
if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) {
addItem(myData,nextLabel,activityIntent(info.activityInfo.applicationInfo.packageName,info.activityInfo.name));
} else {
if (entries.get(nextLabel) == null) {
addItem(myData, nextLabel,browseIntent(prefix.equals("") ? nextLabel: prefix + "/" + nextLabel));
entries.put(nextLabel, true);
}
}
}
}
Collections.sort(myData, sDisplayNameComparator);
return myData;
}
/**
*
* @param data
* @param name
* @param intent
*/
protected void addItem(List<Map<String, Object>> data, String name,Intent intent) {
//name = 'App'
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("title", name);
temp.put("intent", intent);
data.add(temp);
}
/**
*
* @param pkg intent
* @param componentName
* @return
*/
protected Intent activityIntent(String pkg, String componentName) {
Intent result = new Intent();
result.setClassName(pkg, componentName);
return result;
}
/**
*
* @param path
* @return
*/
protected Intent browseIntent(String path) {
Intent result = new Intent();
result.setClass(this, ApiDemos.class);
result.putExtra("com.xunlei.android.apis.Path", path);
return result;
}
private final static Comparator<Map<String, Object>> sDisplayNameComparator = new Comparator<Map<String, Object>>() {
private final Collator collator = Collator.getInstance();
public int compare(Map<String, Object> map1, Map<String, Object> map2) {
return collator.compare(map1.get("title"), map2.get("title"));
}
};
@Override
@SuppressWarnings("unchecked")
protected void onListItemClick(ListView l, View v, int position, long id) {
Map<String, Object> map = (Map<String, Object>) l.getItemAtPosition(position);
Intent intent = (Intent) map.get("intent");
startActivity(intent);
DialogPreference dp;
Dialog d;
}