[英]How to update listview on ViewPager inside Activity or other viiewPager
[英]Update ListView in Viewpager
原谅我对Android的无知。 我只是在学习。 我正在构建一个使用Google的SlidingTabsColors示例代码作为主要布局的应用程序(开发者网站) 。
我已经按照想要的方式使用虚拟数据进行布局。 想法是,每个选项卡将存储用户每一轮的分数,然后在底部显示到目前为止的总分数。
知道哪里有帮助。 ListView
和TextView
在ViewPager
,底部的Button
是包含选项卡和ViewPager
的片段的ViewPager
。 当前,当按下按钮时,新条目被添加到每个玩家的数据集中( ArrayList<Integer>') with the value of
0`。 然后,用户可以点击一个项目并进行编辑。
那是行得通的。 但是ListView
除非被告知,否则不会更新。 因此,当您单击按钮时,UI不会更改,直到您滑动到下一个项目并刷新片段。 因此,一切都已正确添加,我只是不知道如何告诉当前的ListView
更新。
这是父片段中addRound()
方法的代码:
public void addRound() {
// add a blank round for each player in their dataset
for (int i = 0; i < mData.size(); i++) {
mData.get(i).second.add(0);
}
// get the pager adapter
DefaultGameFragmentPagerAdapter adapter = (DefaultGameFragmentPagerAdapter) mViewPager.getAdapter();
int pos = mViewPager.getCurrentItem();
ContentFragment frag = (ContentFragment) adapter.getItem(pos);
if (frag != null) {
frag.update();
}
}
还有ContentFragment
的update()
方法:
public void update() {
mAdapter.notifyDataSetChanged();
}
当我尝试访问自定义ArrayAdapter时收到NullPointerException
,但是如果我从ViewPager
获取当前片段,是否不应该初始化所有这些成员? ( ListView
是在onViewCreated()
方法中设置的)
感谢您抽出宝贵的时间阅读!
贾斯汀
ContentFragment frag = (ContentFragment) adapter.getItem(pos);
切勿使用适配器的getItem()
函数从ViewPager获取当前片段。 它在内部被调用以实例化片段,我们不应显式地对其进行调用。 调用getItem
返回的Fragment不是该位置上ViewPager
中存在的实际片段。 因此,更新调用不会更新预期片段中的数据。
尝试使用此链接中讨论的方法之一。
好的Justinrixx,让我们尝试一些事情:
首先,让我们在Fragment中创建一个公共方法,该方法返回ArrayAdapter的实例,例如getScoreAdapter()
。
其次,让我们在自定义ArrayAdapter中创建一个公共方法来(重新)设置数据集,例如setDataset(ArrayList<int> playerScores);
现在,在您的addRound()
方法中,确保碎片不为空之后,通过getScoreAdapter()
获取适配器的实例,然后在该实例上,通过setDataset()
设置适配器的新数据集并通过证明新数据组。 最后,调用适配器的notifyDataSetChanged()
方法。
不用说,您的自定义ArrayAdapter应该保存它使用的数据集的一个实例,该实例可以传入构造函数中,也可以使用我们的新方法setDataset()
方法进行设置。
我建议的原因是由于您在代码中看到或未看到的内容。 换句话说,我无法可靠地看到您的适配器如何接收更改后的数据集。 因此,我建议明确设置适配器的新数据集,确保适配器继续使用新设置的数据集,并最终将更改通知给他们。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.