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—>ActivityAnimation    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;
	}