2013-01-04 114 views
1

進出口新的與Android編程和我正在試圖通過允許用戶通過輸入一個的EditText文字,使一個ListView。我終於得到它的工作但是我不明白爲什麼我的第一種方法沒有奏效:安卓:使用的ListView ArrayAdapter/ArrayList的

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,values); 
lv.setAdapter(adapter); 

這引起了強制關閉應用程序推出的時候,我發現了它lv.setAdapter是由於(適配器)

經過許多計算器問題去後,我看到一個回答說,沒有必要使用ArrayList和ArrayAdapter。所以我試了下面,它的工作原理:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    lv.setAdapter(adapter); 

這次它工作完美時,我沒有創建數組列表。

所以,我的問題是,爲什麼做這個工作的時候,我沒有定義/創建我的ArrayAdapter一個字符串數組,爲什麼我的第一個方法沒有工作。

感謝提前的幫助,我很抱歉,如果我沒有張貼足夠的代碼。

編輯:這是我第方法將在後面 我試圖重新我的第一個方法,它下面是: 它仍然強行關閉像第一次。只是要注意,在我的第二個方法(工作)中,我所做的並不是使用ArrayList,而是使用arrayAdapter構造中的第3個參數。現在,你的答案告訴我,我可能有價值爲「空」,我認爲你是正確的。我怎麼能糾正這在未來的使用?謝謝!

public class TaskPage extends SherlockActivity { 

EditText display; 
ListView lv; 
ArrayAdapter<String> adapter; 
Button addButton; 
ArrayList<String> values; 




@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    display = (EditText) findViewById(R.id.editText1); 
    lv = (ListView) findViewById(R.id.listView1); 
    addButton = (Button) findViewById(R.id.button1); 


    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values); 
    lv.setAdapter(adapter); 


    addButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String task = display.getText().toString(); 
      values.add(task); 
      adapter.notifyDataSetChanged(); 

     } 
    }); 
+0

你有從當力閉合發生的堆棧跟蹤? –

+0

什麼是「價值觀」? –

+0

值是我的ArrayList的名稱。我有一個按鈕接收EditText文本,然後轉換爲一個字符串。然後我把這個放入數組列表中作爲值 – user1949400

回答

4

如果第二種方法工作,但第一個也沒那麼values至少有一個元素是null。這會在適配器嘗試將此空值與TextView綁定時引發異常。
只需從values刪除任何空數據。

從ArrayAdapter的source code

T item = getItem(position); 
if (item instanceof CharSequence) { // A null value throws an NPE here 
    text.setText((CharSequence)item); 
} else { 
    text.setText(item.toString()); 
} 

我越去想它values本身可能是空太...這就是logcat的錯誤和調試器非常方便

+0

即時通訊也肯定'價值'爲空 –

+0

我沒有嘗試讓值爲空,但我可能已經做到了。我沒有我的第一個方法的完整代碼,所以我不能完全解釋。 – user1949400

+1

「我沒有嘗試讓值爲空」好吧,沒有人故意崩潰他們的應用程序,但我們都這樣做。 :)「我沒有我的第一個方法的完整代碼,所以我不能完全解釋。」我的回答是否幫助你理解正在發生?如果是這樣,請接受它,因爲我不知道除了我已經寫入更多細節之外,任何人都可以回答您的原始問題...... – Sam

0

確認valueslv不爲空後,它不包含任何空元素,這應該在YourActivity中工作,或者子類屬於它。 :

adapter = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_list_item_1, values); 
lv.setAdapter(adapter); 
+0

如果第二種方法與'this'一起工作,那麼如何更改Context參考解決錯誤? – Sam

+0

我其實已經嘗試過這種方法(更改上下文引用)..但它仍然導致了一個關閉的力量。所以我認爲@Sam是正確的,我有數組列表,值爲null。 – user1949400

+0

@Sam:我剛剛發現可能存在與上下文有關的問題;只是我們排除了我們的'ListView'和'ArrayList'對象不是'null'。引用上下文不會導致問題,它只是可以解決錯誤。但是,如果我們確定價值和lv是可以的,那麼這個代碼應該起作用。 –

0

這篇文章很舊,但我碰到它,想要補充什麼修復是我的。根據文檔(http://developer.android.com/reference/android/widget/ArrayAdapter.html),「默認情況下,此類期望提供的資源ID引用單個TextView。」我在裏面使用了一個帶有TextView的RelativeLayout。這是一種-的明顯,但在情況下,它可以幫助別人......