0

让我试着把我面临的情况弄清楚。我有一个从 XML 文件中检索到的标题列表,它随机显示在 ViewPager 的 TextView 中。

在使用 setText 在 TextView 中设置它之前,我已经打印了标题列表和使用 System.out.println 来查看标题的随机标题。

问题是,随机化的标题没有显示在 ViewPager 的当前视图中,它显示在下一个视图中,当我滑动时,同样的事情发生了。在当前视图中,显示的标题与随机标题不同。

我需要文本在当前视图中正确显示,因为当用户单击它时,它应该打开一个页面,其中显示在视图中的文本。

任何人都知道为什么我会遇到这个问题,我该如何解决?

//Code Snippet is from a PagerAdapter
    try{
    randomNo = getRandomNumber(nl.getLength());
    System.out.println("AMOUNT OF ARTICLES : " + nl.getLength());
    System.out.println("RANDOM NUMBER : " + randomNo);

    showTitle = texts.get(randomNo);
    showArticle = urls.get(randomNo);

    System.out.println("RANDOM ARTICLE TITLE : " + showTitle);
    text5.setText(showTitle);  
    }

    catch(Exception e)
    {
        e.printStackTrace();
    }

更新 我弄清楚了为什么文本不能正确显示。

例如,view1 显示 text1 并加载文章 1,view2 显示 text2 并加载文章 2,等等。但是,因为它在第一次运行时加载了所有文章链接和标题,所以它根据随机顺序显示随机标题。

标题1 标题2

链接1 链接2

所以,View1 实际上得到了 link2(最新的随机链接),但仍然停留在 text1 上。每次我滑动时,它都会再次随机化,导致标题和链接混乱。

根据项目要求找到了一种解决方法。我在 Fragment 类而不是 ViewPagerAdapter 中运行随机代码,这样它只加载一次随机代码,这有助于在每个视图中显示相同的标题和链接。我从 Fragment 类中检索了标题并将其显示在我的适配器中。这样,每个视图都显示相同的标题和链接,直到下一次运行。

4

1 回答 1

0

Viewpager 缓存您的视图以节省资源,因此当您滑动它时,如果它距离左右 1 页更远,它最终会丢弃它。所以你需要做的是通知viewpager,你需要更新。这是通过这个“hack”实现的:

像这样覆盖 PagerAdapter 中的 getItemPosition:

public int getItemPosition(Object object) {
    return POSITION_NONE;
}

然后,每次随机化 Textview 时,都必须调用notifyDataSetChanged()viewpager。

有关更多详细信息,请参阅此问题

于 2013-06-27T06:04:53.570 回答