2014-09-25 107 views
0

我覺得這個問題已被問及一百萬次,並回答了一百萬次。我已閱讀並回顧了十幾個答案,但仍無法實現這一目標。對我來說這似乎很簡單,但我花了很長時間,而且我只看到陣列適配器的第一項,無論我做什麼。我希望我錯過了一些非常簡單的事情,但大多數我發現的例子都表明這是做到這一點的方式,所以我很困惑。將項目添加到ArrayAdapter <String>

result = (ListView) rootView.findViewById(R.id.resultesult); 

    resultAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    resultAdapter.add("one"); 
    resultAdapter.clear(); 
    resultAdapter.add("two"); 
    resultAdapter.add("three"); 

    result.setAdapter(resultAdapter); 

當我運行我的程序時,ListView似乎只包含「兩個」。 .count()是2,就像我期望的那樣(.clear()之後的「2」和「3」),但ListView只顯示「2」。即使我在運行時添加了一千個項目,它也只會顯示「兩個」。如果我清除()它,那麼它顯示我的第一件事.add(),但我真的很想展示我添加的所有內容,而不僅僅是第一個。

這是一個非常短的剪切,沒有這樣的意義。在我的實際程序中,我做了.add(「blah」),然後在.post()之後的.notifyDataSetChanged()發生了各種事情之後;但我也有同樣的結果。

UPDATE1:我的佈局(按照評論要求)如下。當ListView改爲TextView時,佈局似乎正常工作。當我問到它是否沒有擴展到ScrollView或什麼時,我確實想知道。我應該把它放在第一位。

<AutoCompleteTextView 
    android:id="@+id/command" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentStart="true" 
    android:ems="10" 
    android:hint="@string/commandHint" 
    android:imeActionId="@+id/execCommand" 
    android:imeActionLabel="@string/exec" 
    android:imeOptions="actionSend" 
    android:inputType="textAutoCorrect|textAutoComplete|textMultiLine|textUri" 
    android:selectAllOnFocus="false" 
    android:typeface="monospace" > 

</AutoCompleteTextView> 

<ScrollView 
    android:id="@+id/scrollView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/command" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:fadingEdge="horizontal|vertical" 
    android:scrollbars="horizontal|vertical" > 

    <ListView 
     android:id="@+id/result" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</ScrollView> 

UPDATE2:每對夫婦下面的答案,我試圖與一個ArrayList,並沒有任何區別。

result = (ListView) rootView.findViewById(R.id.resultesult); 

    ArrayList<String> doubtThisllMatter = new ArrayList<String>(); 
    doubtThisllMatter.add("one"); 
    doubtThisllMatter.add("two"); 
    doubtThisllMatter.add("three"); 

    resultAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      doubtThisllMatter); 

    result.setAdapter(resultAdapter); 

我仍然只在活動中顯示的列表中獲得「one」。

+1

可以發佈你的佈局xml plz嗎?我認爲它可能有些問題。 – 2014-09-25 04:25:15

+0

啊,張貼布局是關鍵。它將一個卷軸放在一個卷軸上。我最初有scrollview,因爲listview曾經是一個textview。啊。 – jettero 2014-09-25 10:14:55

回答

2

請刪除ScrollView。不允許在ScrollView中使用ListView。由於ListView默認具有滾動效果。

1
protected ArrayList<String> arrayStrings = new ArrayList<String>(); 

arrayStrings.add("One"); 
arrayStrings.add("Two"); 
arrayStrings.add("Three"); 

resultAdapter = new ArrayAdapter<String>(this, 
      R.layout. simple_list_item_1, arrayStrings) 

result.setAdapter(resultAdapter); 
+0

我其實還沒有列表。我稍後收到物品。片段只是我希望工作的一個例子。你是說我應該更新傳遞給適配器的數組嗎?我可能不明白。 – jettero 2014-09-25 04:55:53

+0

是的,首先你必須增加值arrayList或數組無論你會採取,然後將其傳遞給arrayAdapter – 2014-09-25 04:59:28

+0

我不認爲這是正確的。我的意思是,我顯然不知道,但我不這麼認爲。你如何將數組列表傳遞給適配器?它不是已經在適應它嗎? .add()是否將新值傳遞給自適應數組的方式? – jettero 2014-09-25 05:04:16

1

創建全局ArrayList並使用add()將內容添加到它,並將其傳遞給ArrayAdapter。最好將ListString[]更改爲ArrayAdapter,並將該適配器設置爲List。您應更新傳遞給Adapter的List或Array,而不是Adapter本身。

ArrayList<String> myList ; 


myList = new ArrayList<String>; 

myList.add("ONE");  // add items to List 
myList.add("TWO"); 
myList.add("THREE"); 
myList.add("FOUR"); 



ArrayAdapter<String> ad = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, myList); // pass List to ArrayAdapter 

yourListView.setAdapter(ad); // set the adapter to ListView. 

編輯

請刪除ScrollView。不允許在ScrollView內使用ListView。由於ListView默認具有滾動效果。

+0

我還沒有列表或數組。它在後來出現。片段只是我希望工作的一個例子。 – jettero 2014-09-25 04:54:56

+0

您應該更新傳遞給適配器的數組。當你得到的項目,將其添加到數組或列表,然後將其傳遞給適配器。 – Aniruddha 2014-09-25 04:57:18

+0

我認爲這是不對的。我的意思是,我顯然不知道,但我不這麼認爲。你如何將數組列表傳遞給適配器?它不是已經在適應它嗎? .add()是否將新值傳遞給自適應數組的方式? – jettero 2014-09-25 05:04:59

-1

根據你的問題,你會在稍後得到數據。

private ArrayList<String> arrayList = new ArrayList<String>(); 
private ArrayAdapter resultAdapter; 

// Inside onCreate() or any other method. 
//Currently List is empty 
resultAdapter = new ArrayAdapter<String>(this, android.R.layout. simple_list_item_1, arrayList) 
result.setAdapter(resultAdapter); 

//更多的代碼...

//讓你在你的ArrayList一些情況後,現在有數據,服務電話,也許 //在ArrayList中添加數據後,只需調用notifydatasechanged

resultAdapter.notifyDataSetChanged(); 
+0

是的,我說在這個問題的主體中(儘管在這一點上它已經被很好地掩埋了)。我完全在實際代碼中使用notifyDataSetChanged(),但代碼段應該像現在這樣工作。在UPDATE2中,我甚至預先填充了一個數組列表,我仍然只是得到第一個元素。 我認爲這是更多的佈局問題。我現在正在看。 – jettero 2014-09-25 09:42:57

1

當你發佈你的佈局後,你遇到這個問題的原因很明顯:你把ListView放在一個ScrollView中。因此,刪除ScrolllView並設置ListView佔用足夠的空間必須解決您的問題。我很高興知道你已經自己解決了。^^