Android 添加到ListView

Android 添加到ListView,android,android-listview,Android,Android Listview,我正在尝试将列表视图添加到我的活动中。以下是假设发生的情况: 用户单击一个按钮并使用异步任务从internet获取数据。然后应将该数据添加到列表视图中。数据来自联机表,因此如果表中有10行,那么Listview中应该有10个值 但是我有一些问题。 首先,是否可以将listview添加到预先存在的布局中并动态更新 列表视图是否意味着不能使用setContentView()方法而必须使用setListAdapter 如果布局上已经有两个按钮,是否可以将列表视图添加到它们下面,并仍然使用setCont

我正在尝试将列表视图添加到我的活动中。以下是假设发生的情况: 用户单击一个按钮并使用异步任务从internet获取数据。然后应将该数据添加到列表视图中。数据来自联机表,因此如果表中有10行,那么Listview中应该有10个值

  • 但是我有一些问题。 首先,是否可以将listview添加到预先存在的布局中并动态更新

  • 列表视图是否意味着不能使用setContentView()方法而必须使用setListAdapter

  • 如果布局上已经有两个按钮,是否可以将列表视图添加到它们下面,并仍然使用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 );
    }
    
    @覆盖
    创建时受保护的void(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_目击);
    ListView list=getListView();
    setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_列表_项_1,值));
    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>
    
    ?xml version=“1.0”encoding=“utf-8”>
    
    1)是的,您可以在布局中使用
    列表视图
    ,并更新
    列表视图
    显示的数据。通常,您会创建一个继承自的类,以弥合基础数据和为
    ListView
    生成视图之间的差距

    要更新显示的数据时,请在适配器上使用和

    2) 不可以。只有当您的活动继承自
    ListActivity
    并且
    ListView
    元素的id为
    @android:id/list
    时,才调用
    setListAdapter()
    。以下是此类元素的一个示例:

    <ListView android:id="@android:id/list"
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:layout_weight="1"/>
    
    
    
    您仍然可以使用
    setContentView()
    来传递所需的XML布局以供使用

    3) 是的,基于上述原因

    1)是的,您可以在布局中使用
    列表视图
    ,并更新
    列表视图
    显示的数据。通常,您会创建一个继承自的类,以弥合基础数据和为
    ListView
    生成视图之间的差距

    要更新显示的数据时,请在适配器上使用和

    2) 不可以。只有当您的活动继承自
    ListActivity
    并且
    ListView
    元素的id为
    @android:id/list
    时,才调用
    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设置为已创建(并包含ListView)的任何布局的ID

    1) 是的,您可以将listview添加到预先存在的布局中,可以是静态的,也可以是动态的(通过LayoutInput或new listview(…))

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

    3) 通过指定要在其中添加myExistingView.addView(listview,index)的索引,可以将listview添加到现有布局中,无论是在已经存在的布局之前还是之后


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

    您可以将listview创建为任何XML布局的一部分。您不需要扩展ListActivity(我认为这是您的想法来源),但它可以提供帮助

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

    1) 是的,您可以将listview添加到预先存在的布局中,可以是静态的,也可以是动态的(通过LayoutInput或new listview(…))

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

    3) 通过指定要在其中添加myExistingView.addView(listview,index)的索引,可以将listview添加到现有布局中,无论是在已经存在的布局之前还是之后


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

    我喜欢上面的两个答案,但需要选择一个,以便这一个在代码中得到它。谢谢,我还添加了我的代码,以防其他人遇到相同的问题。我喜欢上面的两个答案,但需要选择一个,这样这一个就可以得到代码。谢谢,我也添加了我的代码,以防其他人遇到同样的问题