ListView 仅在 App 重启时填充

ListView only populates on App Restart

我的 ListView 函数有问题。它是一个带有数组适配器的简单列表视图。该数组包含字符串。但是,数据只会在我重新启动应用程序时填充。它不会在 activity 启动后立即填充。

public void setTemp() {
    carpoolView = (ListView) findViewById(R.id.carpoolsList);
    carpoolView.invalidateViews();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, objectIds);

    carpoolView.setAdapter(adapter);


}


    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_pools);
    Parse.initialize(this, "XXXXXXXXXX", "XXXXXXXXXXXX");
    String currentUserName = ParseUser.getCurrentUser().get("fullName").toString();
    ActionBar mp = getActionBar();
    mp.setTitle(currentUserName +"'s Carpools");
    mp.setBackgroundDrawable(new ColorDrawable(Color.RED));
    receiveCarpools();
    //setList();
    setTemp();


    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

您可以在最后使用此功能line.Hope它适合您。

notifyDataSetChanged();

Here 是来自 vogella 的关于如何使用列表视图的很好的教程。

基本上,您需要在适配器上调用 notifyDataSetChanged() 以通知它需要从列表视图的模型更新视图。

因此,在使用 setTemp() 时,为您的 Activity/Fragment 调用此 onCreateView() 以最初填充列表。如果您修改列表视图的模型,例如要添加新的列表项,您需要使用 notifyDataSetChanged() 或 notifyDataSetInvalidated() 调用让适配器知道数据模型已更改。像这样

mAdapter.notifyDataSetChanged();

您还需要避免在每次 setTemp() 时都创建新的适配器。每次都创建适配器并让旧适配器进行垃圾收集,这有点浪费资源。建议为适配器使用一个全局字段,它可以持久保存你的数据模型,这样你就可以在事情发生变化等情况下随时通知它。

首先

为什么不在 onCreate 方法中投射您的 ListView,您使用的是 Activity、Fragment 吗?所以问题是为什么您在内部函数中投射 ListView 项目?...

其次,正如人们之前所说,如果您的适配器,或者在这种情况下 objectIds 发生变化,要将它通知给您的适配器,您必须使用

carpoolView.notifyDataSetChanged(); 

告诉您的适配器您的数据已更改,因此必须更新。

你什么时候调用你的函数?,这也可能是错误。

此致。