繁体   English   中英

添加到ListView

[英]Adding to ListView

我正在尝试向活动添加列表视图。 这是可能发生的情况:用户单击一个按钮,该按钮使用asyncTask从Internet获取数据。 然后,该数据应添加到列表视图。 数据来自在线表,因此表中有10行,而Listview中应该有10个值。

  1. 但是我有一些问题。 首先,可以将Listview添加到现有布局并动态更新吗?

  2. 列表视图是否意味着您不能使用setContentView()方法,而必须使用setListAdapter?

  3. 如果您的布局上已经布置了两个按钮,可以将列表视图添加到它们下面,并且仍然可以使用setContentView()方法来实现吗?

谢谢

编辑

更新的代码-适用于:

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

    ListView list = getListView();
    list.setAdapter( new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, values ) );
    list.setTextFilterEnabled( true );
}

XML布局

?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation = "vertical">

  <TableLayout

android:layout_width = "fill_parent"
android:layout_height = "wrap_content"  
  >

  <TableRow

android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_weight = "1"
  >

  <TextView

android:id = "@+id/txtTitle"
android:layout_width = "wrap_content"
android:layout_height = "fill_parent"
android:layout_weight = "1"
android:gravity = "center"
android:text = "ISS Predictions" 
android:textStyle="bold"
android:textColor = "#FFFFFF"
    />

  <Button 
android:id="@+id/reloadTen" 
android:layout_height="wrap_content" 
android:layout_width ="fill_parent"
android:layout_gravity = "right"
android:layout_weight = "1"
android:text = "Reload"
android:textColor = "#FFFFFF"
android:textStyle = "bold"
android:background = "#000000"
/>

  </TableRow>

  </TableLayout>

   <ListView

android:id = "@+id/android:list"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:textSize = "15dp"
android:textStyle = "bold"

  />


</LinearLayout>

1)是的,您可以在布局中使用ListView ,并更新ListView显示的数据。 通常,您需要创建一个从ArrayAdapter继承的类,以弥合基础数据与为ListView生成视图之间的鸿沟。

当您想要更新显示的数据时,请在适配器上使用add()notifyDataSetChanged()

2)不。仅当您的活动继承自ListActivity 并且具有ID为@android:id/listListView元素时,才调用setListAdapter() 这是此类元素的示例:

<ListView android:id="@android:id/list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:layout_weight="1"/>

您仍然可以使用setContentView()传递要使用的所需XML布局。

3)是,由于上述原因。

您可以将ListView创建为任何XML布局的一部分。 您无需扩展ListActivity(我认为这是您从中获得灵感的地方),但可以提供帮助。

如果不扩展ListActivity,则可以将ContentView设置为已创建的布局的ID(并包含ListView)。

1)是的,您可以静态或即时(通过LayoutInflater膨胀或新的ListView(...))将Listview静态或动态地添加到现有布局中。

2)您可以使用setContentView设置现有布局,无论它是否包含listview。 如果它包含现有的列表视图,则需要说出findViewById(R.id.myListLayoutId)并确保将其包含在XML中。

3)您可以通过指定myExistingView.addView(listView,index)的索引,将listview添加到现有布局的之前或之后的现有布局。

无论如何,您都需要在列表视图上设置适配器(无论您如何创建/添加),该适配器将包含要填充的数据。 您可以随时向适配器添加数据,只要您通过调用adapter.notifyDataSetChanged()通知适配器其数据集已更改即可。 这将导致要更新其适配器的listview。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM