2011-05-17 39 views
2

我是Android新手,現在我正在學習ListView關於ListView代碼

我是從bogotobogo.com閱讀教程,當我看到這樣的代碼:

ListView lv = getListView(); 
      lv.setTextFilterEnabled(true); 
      *** lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView parent, View v, 
         int position, long id) { 
         // When clicked, show a toast with the TextView text 
        Toast.makeText(getApplicationContext(), ((TextView) v).getText(), 
        Toast.LENGTH_SHORT).show(); 
       } 
      }); *** 

我無法從lv.setOnItemClickListener(new OnItemClickListener()理解的代碼;這是一個爭論嗎?

有人能幫我理解嗎?

回答

1

該代碼正在做的是實現一個新的OnItemClickListener內聯。 OnItemClickListener接口基本上是一個合約,它表示一個對象將提供函數onItemClick(....)的實現。稍後,當列表中的項目被點擊時,onItemClick函數將被調用,AdapterView(實例化和管理列表行,視圖 - (特定行的呈現代碼),位置(位置清單)和一個id屬性,我從來沒有使用,所以你可以看看什麼是通過英寸

這樣的內聯代碼總是看起來很奇怪我還有一些其他的方式來寫這個,我認爲讓更多的直觀感覺只要牢記,你正在做的是寫一些代碼什麼時候在你的列表中的行被點擊即可執行

1 - 你可以有你的活動實施OnItemClickListener

public class SomeActivity extends Activity implements OnItemClickListener{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.yourview); 

     ListView lv = (ListView)findViewById(R.id.listView); 
     lv.setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     //Your toast code goes in here 
    } 
} 

在此代碼中,您的主類實現了OnItemClickListener接口,因此setOnItemClickListener將主類(this)視爲OnItemClickListener的實例。當列表中的某行被點擊時,onItemClick函數將被調用。

您還可以2 - 讓您的點擊偵聽器來自內部類。

public class SomeActivity extends Activity implements OnItemClickListener{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.yourview); 

     ListView lv = (ListView)findViewById(R.id.listView); 
     lv.setOnItemClickListener(new YourInternalClass()); 
    } 


    class YourInternalClass implements View.OnItemClickListener{ 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
      //Your toast code goes in here 
     } 
    } 
} 

而且真的所有這三種方法都在做同樣的事情:提供了setOnItemClickListener與View.OnItemClickListener類的實例,將有它在列表中的一行被點擊時調用onItemClick功能。