将项添加到ArrayAdapter <string> </string>

时间:2014-09-25 04:18:48

标签: java android android-listview android-arrayadapter

我觉得这个问题已被问了一百万次,并回答了一百万次。我已经阅读并回顾了十几个答案,但仍然无法使其发挥作用。这对我来说似乎很简单,但我已经花了很长时间在它上面,我只看到我的阵列适配器的第一项,无论我做什么。我希望我错过了一些非常简单的东西,但大多数我发现的例子表明这是做到这一点的方式,所以我很困惑。

    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()之后的“两个”和“三个”),但ListView只显示“两个”。即使我在运行时添加了一千个项目,它也只会显示“两个”。如果我.clear()它,那么它首先显示我.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 );

我仍然只是在活动中显示的列表中获得“一个”。

5 个答案:

答案 0 :(得分:3)

请删除ScrollView。不允许在ScrollView中使用ListView。因为ListView默认具有滚动效果。

答案 1 :(得分: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 );

答案 2 :(得分:1)

创建一个全局ArrayList并使用add()将内容添加到它,并将其传递给ArrayAdapter。最好将ListString[]传递给ArrayAdapter并将该适配器设置为List您应该更新传递给适配器的列表或数组,而不是适配器本身。

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。不允许在ListView内使用ScrollView。因为ListView默认具有滚动效果。

答案 3 :(得分:1)

发布布局后,您遇到此问题的原因显而易见:您将ListView放在ScrollView中。因此删除ScrolllView并设置ListView占用足够的空间必须解决您的问题。我很高兴知道你自己已经解决了。^^

答案 4 :(得分:-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();