如何在 Android 上动态地将元素添加到 ListView 中?
任何人都可以解释或建议动态创建 ListView
在 Android 中?
这是我的要求:
- 我应该能够通过按按钮动态添加新元素。
- 应该足够简单易懂(可能没有任何性能改进或 convertView,例如)
我知道关于这个主题有很多问题,但我找不到任何可以回答我的问题的问题。
Can anyone explain or suggest a tutorial to dynamically create a ListView
in android?
Here are my requirements:
- I should be able to dynamically add new elements by pressing a button.
- Should be simple enough to understand (possibly without any performance improvements or convertView, for instance)
I know there are quite a few questions on this topic, but I couldn't find any that answer my question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
首先在项目的
res/layout/main.xml
文件夹中创建一个 XML 布局:这是一个简单的布局,顶部有一个按钮,底部有一个列表视图。请注意,
ListView
具有 id@android:id/list
,它定义了ListActivity
可以使用的默认ListView
。android.R.layout.simple_list_item_1
是 Android 提供的默认列表项布局,您可以使用此库存布局来处理非复杂的事情。listItems
是一个 List,它保存 ListView 中显示的数据。所有的插入和删除都应该在listItems
上完成;listItems
中的更改应反映在视图中。这是由 ArrayAdapteradapter.notifyDataSetChanged();
适配器使用 3 个参数进行实例化:上下文,可以是您的
activity/listactivity
;您的个人列表项的布局;最后是列表,这是列表中要显示的实际数据。Create an XML layout first in your project's
res/layout/main.xml
folder:This is a simple layout with a button on the top and a list view on the bottom. Note that the
ListView
has the id@android:id/list
which defines the defaultListView
aListActivity
can use.android.R.layout.simple_list_item_1
is the default list item layout supplied by Android, and you can use this stock layout for non-complex things.listItems
is a List which holds the data shown in the ListView. All the insertion and removal should be done onlistItems
; the changes inlistItems
should be reflected in the view. That's handled byArrayAdapter<String> adapter
, which should be notified using:adapter.notifyDataSetChanged();
An Adapter is instantiated with 3 parameters: the context, which could be your
activity/listactivity
; the layout of your individual list item; and lastly, the list, which is the actual data to be displayed in the list.而不是
你可以直接调用
instead of
you can directly call
首先,您必须在 Activity_main.xml 中添加一个 ListView、一个 EditText 和一个按钮。
现在,在您的 ActivityMain 中:
这对我有用,我希望对您有所帮助
First, you have to add a ListView, an EditText and a button into your activity_main.xml.
Now, in your ActivityMain:
This works for me, I hope I helped you
如果您想在 AppCompatActivity 而不是 ListActivity 中使用 ListView,您可以执行以下操作(修改 @Shardul 的答案):
并在布局中而不是使用
android:id="@android:id/list" 你可以使用
android:id="@+id/listDemo"
所以现在你可以在普通的
AppCompatActivity
中拥有一个ListView
。If you want to have the ListView in an AppCompatActivity instead of ListActivity, you can do the following (Modifying @Shardul's answer):
And in you layout instead of using
android:id="@android:id/list"
you can useandroid:id="@+id/listDemo"
So now you can have a
ListView
inside a normalAppCompatActivity
.MainActivity.java 文件的代码。
activity_main.xml 布局文件的代码。
ScreenShot
Code for MainActivity.java file.
Code for activity_main.xml layout file.
ScreenShot
简短的回答:当您创建 ListView 时,您向它传递对数据的引用。
现在,每当更改此数据时,它都会影响列表视图,从而在调用adapter.notifyDataSetChanged();之后将项目添加到其中。
如果您使用 RecyclerView,请仅更新最后一个元素(如果您已将其添加到 obj 列表的末尾)以节省内存: mAdapter.notifyItemInserted(mItems.size() - 1);
The short answer: when you create a ListView you pass it a reference to the data.
Now, whenever this data will be altered, it will affect the list view and thus add the item to it, after you'll call adapter.notifyDataSetChanged();.
If you're using a RecyclerView, update only the last element (if you've added it at the end of the list of objs) to save memory with: mAdapter.notifyItemInserted(mItems.size() - 1);