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();
告诉您的适配器您的数据已更改,因此必须更新。
你什么时候调用你的函数?,这也可能是错误。
此致。
我的 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();
告诉您的适配器您的数据已更改,因此必须更新。
你什么时候调用你的函数?,这也可能是错误。
此致。