我觉得这个问题已被问了一百万次,并回答了一百万次。我已经阅读并回顾了十几个答案,但仍然无法使其发挥作用。这对我来说似乎很简单,但我已经花了很长时间在它上面,我只看到我的阵列适配器的第一项,无论我做什么。我希望我错过了一些非常简单的东西,但大多数我发现的例子表明这是做到这一点的方式,所以我很困惑。
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 );
我仍然只是在活动中显示的列表中获得“一个”。
答案 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。最好将List
或String[]
传递给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();