第二個Activity和Android ListView控制項

來源:互聯網
上載者:User

上一篇:http://www.bkjia.com/kf/201203/121466.html

上一個Activity中已經看到,start的是第二個Activity。寫程式的都覺得程式理解起來比較容易,還是先奉上代碼。
先看list_item.xml檔案:
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
4     android:layout_width="fill_parent"
5     android:layout_height="fill_parent"
6     android:padding="10dp"
7     android:textSize="16sp" >
8 </TextView>

xml檔案很簡單,就一個TextView,用來顯示List中的每一個item。這個是在eclipse中GraphLayout中拖進去,自動產生。其中需要注意的是textSize這個可以修改,它決定了字型的大小。這裡字型的單位是sp。
下面來看Java代碼:
 1 package Workshop.english.englishwords;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.*;
 6 import android.view.*;
 7 import android.app.ListActivity;
 8 import android.content.Intent;
 9 import android.widget.AdapterView;
10 import android.widget.AdapterView.OnItemClickListener;
11        
12 /* This list activity list all unit1~12 */
13 public class UnitListAdapter extends ListActivity {
14    
15
16     @Override
17     protected void onCreate(Bundle savedInstanceState)
18     {
19        
20         super.onCreate(savedInstanceState);
21        
22         setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, UNIT_NAME));
23         ListView lv = getListView();
24         lv.setTextFilterEnabled(true);             
25        
26         lv.setOnItemClickListener(new OnItemClickListener() {
27             public void onItemClick(AdapterView<?> parent, View view,
28                                                int position, long id) {
29                
30                 Intent intent = new Intent(UnitListAdapter.this, WordActivity.class);
31                 startActivity(intent);                                  
32             }
33         });
34     }
35    
36     static final String[] UNIT_NAME = new String[] {
37         "unit1", "unit2", "unit3", "unit4", "unit5", "unit6"};   
38 }

代碼其實很簡單。我一直崇尚簡單。簡單容易理解。特別對於初學者,簡單的代碼使人能抓住重點,不會迷失。
注意到這裡用到的關鍵控制項是ListView。ListView控制項在我們看到的應用中使用十分廣泛,我們最常見的app store中找需要的app時,看到的就是是ListView。
所以在這裡繼承的是ListActivity,而不是 直接繼承於Activity。和ListView密切的一個東西就是listAdapter。
 在這裡,反映了MVC的模式。M是模式,其實是資料來源,V是視圖,是顯示資料的,C是控制,是控制資料的,它是聯絡M和V的紐帶。
在這裡例子裡,可以把我定義的靜態String數組看作是M,ListView看作是V,而listAdapter就是C。那麼,可以這麼說,adapter就是將String數組中的資料,也就是那些string顯示到ListView中。line 22  的函數調用正反映了這個過程。
接下來的一個關鍵是定義每個item上的click,也就是,我希望和我們使用app store的經驗一項,點一下一個item,便會在下一個螢幕中顯示item的內容。
所以,這裡給ListView給item設定了事件監聽,line 26實現了這個設定。在listener中實現了onItemClick方法,目的是切換到另一個Activity----WordActivity。
 
這個程式,不得不說的是,它可能過於簡單。一個方面,只有一個簡單的ListView,第二個方面,ListView中的只有簡單的幾個資料,最後,在監聽到事件之後,只是簡單的切換到另一個Activity。
為什麼這麼簡單,主要是因為我做的是原型,原型不需要那麼複雜。簡單的容易控制。在最後的程式中,這裡的setListAdapter可以用其他更好的方法,另外還有兩種Adapter。最重要的是,資料來源肯定不會是這樣的數組,關於資料存放區,大量的資料可以存在資料庫中,少量的資料可以以檔案的形式存放。所以會有專門的類負責資料擷取。
總的來說,原型是沒有問題了,而且基本的元素也具備了,瞭解到了重要的控制項ListView的各個方面。
最後,還是來分享下調試過程中積累的經驗。
開始寫程式的時候,基本上是找個例子模仿。
從官網上找了一個例子,模仿了一下。基本上,我是對的,但是,可惜的是,只對了一半。前面說到的,Activity和xml檔案緊密的結合在一起。My Code中用到了ListView,我從官網上找了一個ListView的例子模仿了一下,這是剛開始寫代碼的時候,不是嗎?可是很不幸,官網上沒有xml的檔案,我只能自己根據自己的理解去寫xml。我的程式一運行就出問題。而且debug顯示,就處在ListView的這個Activity裡。但是到底在哪裡,還是未知。能看到代碼處在setViewAdapter調用的這一行,但是深入進去,卻看不到。

久攻不下,我還是選擇求助於網路。在網上搜了很多的用到ListView的例子,仔細分析,找出和我的程式的差異。皇天不負苦心人,終於找到一個基本接近的例子。再看看,Java程式應該沒有什麼問題,差異就在xml檔案裡。經驗告訴我,我的xml檔案有問題。

看看我的xml檔案,加的是一個LinearLayout,但是例子裡加的是TextView. Good,就按照例子中的加一個TextView, 結果,一下子就好了。

回頭仔細想想也是。因為ListView中的String需要顯示在TextView裡,如果沒有TextView,那麼用Adapter的時候,String資料就沒地方放。那麼分析下來,肯定是在setViewAdapter的函數裡找TextView沒有找到,所以出現了對象為空白,故出錯。

這個經曆使我進一步認識到:xml,是非常重要滴。另外,理解函數的依賴的基礎,也是很重要滴,不是能簡單的調用就可以滴,要深入理解隱藏在背後的東西。
 

 摘自 愛心覺羅氏

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.