2015-07-21 65 views
2

我想通過觸發一個隱含的意圖創建一個包含電話上所有可用應用程序名稱的列表。作爲一名Android初學者,我正在學習一本書的教程。我之前通過擴展ArrayAdapter創建了自定義的適配器,但這個簡單的ArrayAdapter的語法對我來說並不清楚。那就是:ArrayAdapter初始化不清除

ArrayAdapter<ResolveInfo> adapter = new ArrayAdapter<ResolveInfo> (getActivity(),android.R.layout.activity_list_item,activities) 
{ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View v = super.getView(position, convertView, parent); 
     TextView tv = (TextView)v; 
     ResolveInfo ri = getItem (position); 
     tv.setText(ri.loadLabel(pm)); 
     return v; 
    } 
}; 

1-爲何方法getView被調用ArrayAdapter的構造函數後的括號內調用?

2-這是一種匿名類結構嗎?

3-這實際上是ResolveInfo對象類型的自定義適配器嗎?

任何幫助將不勝感激。由於

+0

1 /參見#2。 2 /是的。 3 /是的。 – njzk2

+0

謝謝,你能解釋一下這個匿名類的結構嗎?這將是一個好處。 –

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – njzk2

回答

0
  1. getView(int position, View convertView, ViewGroup parent)在括號內叫,因爲你要構建new陣列適配器,因此必須提供適配器所需的方法。

  2. 是的,這就是它到底是什麼

  3. 是的,你正在創建的對象ResolveInfo的陣列定製ArrayAdapter

我假設你之前已經通過實施延長一個ArrayAdapter類你自己的Java類文件,這基本上是做同樣的事情。實現您自己的Java Class文件的好處是您可以在項目的任何地方使用相同的ArrayAdapter。但是,如果這是唯一需要這個適配器的地方,那麼以這種方式實施它可能會更好。

+0

非常感謝。這讓事情變得清晰起來。 Btw是ArrayAdapter默認情況下只適用於數組,如果它需要處理任何其他對象,我們需要一個自定義適配器? –

+0

@UmairRiaz是的,您需要自定義對象的自定義適配器。 –