blog

Android ApiDemoサンプル解釈2:ListActivity

onCreate, onCreate, onCreate, onCreate, onCreate, onCreate, onCreate, onCreate.\n...

May 2, 2025 · 4 min. read
シェア

前のセクションで説明したようにApiDemoプロジェクトが作成されたら、各例題のコードを分析しましょう。読者はAndroid開発の基本的な理解を持っているか、Android開発の基本的なチュートリアルを読んだことがあるはずです。

ApiDemosのonCreate()内のコード:

setListAdapter(new SimpleAdapter(this, getData(path),    
 android.R.layout.simple_list_item_1, new String[] { "title" },    
 new int[] { android.R.id.text1 }));  

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

ListActivity がリストを表示するために使用できることを知っていれば、 SimpleAdapter を使用する際に二次元テーブルを借りることで、よりよく理解することができます。 SimpleAdapter のデータソースのデータ型は List<? extends Map<String, ?>> リストの各項目は Map オブジェクトで、二次元テーブルの行に相当します。> 文字列で、テーブルのカラム名に相当します:

new String[] { "title" } は表示するリストの配列で、ApiDemosでは "title "カラムのみ表示します。"タイトル", "フィールド1", "フィールド2", "フィールド3"}

protected List getData(String prefix) {    
List<Map> myData = new ArrayList<Map>();    
     
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);    
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);    
     
PackageManager pm = getPackageManager();    
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);    
     
... ...    
for (int i = 0; i < len; i++) {    
...    
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;    
}   

getData(String接頭辞)は、Label属性と各Activityの現在の階層(接頭辞)に基づいて、現在のリストの項目がリーフリストアイテムかカテゴリリストアイテムかを決定し、リーフリストアイテムであればactivityIntentとして追加されます。リーフリスト項目であれば、activityIntentとして追加され、ユーザーがリスト項目をクリックすると、この例がトリガーされます。カテゴリリスト項目であれば、browseIntentを追加し、browseIntentはまだApiDemosアクティビティをトリガーしますが、Intentには、変更されたカテゴリの下のサブカテゴリを表示する必要があることを示すExtraメッセージがあります:

Intent result = new Intent();    
result.setClass(this, ApiDemos.class);    
result.putExtra("com.example.android.apis.Path", path); 

この時点で、ユーザーがchange node list itemをクリックすると、同じく分類された下層ディレクトリに移動します。

protected void addItem(List<Map> data, String name, Intent intent) {    
Map<String, Object> temp = new HashMap<String, Object>();    
temp.put("title", name);    
temp.put("intent", intent);    
data.add(temp);    
}    
     
@Override   
protected void onListItemClick(ListView l, View v, int position, long id) {    
Map map = (Map) l.getItemAtPosition(position);    
     
Intent intent = (Intent) map.get("intent");    
startActivity(intent);    
}   

addItemは返されたリストにアイテムを追加します。各レコードは2つのカラムを含んでいます:"title", "intent"、これは "title "カラムのみを表示します。もし "intent "カラムに情報を表示したいのであれば、android.R.layout.simple_list_item_1を使用することはできません。 インテントは、"Hello World "のようなトリガー例や、より低レベルのリスト例にすることができ、トリガーアクティビティはApiDemosのままです。

<application android:name=”ApiDemosApplication”    
android:label=”@string/activity_sample_code”    
android:icon=”@drawable/app_sample_code” >   
...    
</application>   
Read next

ビッグデータが伝統的金融を破壊する?

2013年はインターネット金融元年です。金融業界におけるインターネット技術の応用は、銀行主導の伝統的な金融業界の淀んだ水に一石を投じるようなものです。今後のインターネット金融の発展の大きな流れは、ビッグデータの応用であり、これは金融の本質に対する人々の伝統的な理解を変えました。以前、学界では、金融の本質は仲介であると広く信じられており、また、金融の本質はリスクのコントロールと管理であると考える人もいました。しかし、インターネット金融の発展に伴い、一部の人々は金融を再定義し始め、金融とはビッグデータであると考えるようになりました。

May 2, 2025 · 2 min read