ListView仅在App Restart上填充

时间:2015-07-06 21:45:07

标签: android listview adapter populate

我的ListView功能有问题。这是一个带有arrayadapter的简单列表视图。该数组包含字符串。但是,每当我重新启动应用程序时,数据都会填充。一旦活动开始,它就不会填充。

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);

3 个答案:

答案 0 :(得分:1)

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

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

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

mAdapter.notifyDataSetChanged();

每次setTemp()时都需要避免创建新的适配器。这有点浪费资源来每次创建适配器并让旧适配器被垃圾收集。建议为适配器使用全局字段,该字段可以对数据模型保持持久性,以便在事情发生变化时始终可以通知它等。

答案 1 :(得分:0)

你可以在最后一行使用这个功能。希望它适合你。

notifyDataSetChanged();

答案 2 :(得分:0)

首先

为什么不在onCreate方法中强制使用ListView,你使用的是Activity,Fragment吗?所以问题就是为什么你在内部函数中强制转换ListView项目?...

其次,正如之前人们所说,如果你的适配器,或者在这种情况下objectIds改变,要通知你的适配器,你必须使用

carpoolView.notifyDataSetChanged(); 

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

你什么时候打电话给你的功能?这也可能是错误。

问候。