列表视图 - 在菜单选择时设置View.GONE不会立即隐藏

时间:2012-07-19 15:16:02

标签: java android listview visibility

TLDR:

我正在设置myListView.setVisibility(View.GONE);,但直到稍后它才会消失......我是否需要让它知道我已经改变了它的可见性?或者我是否还需要隐藏它的内在元素或什么?

问题描述:

我有一个普通的新闻应用。您会看到“主要”部分的文章列表,然后您可以单击选项以选择新部分。

当用户点击时,部分标题发生了变化,但是列表中的文章只会放在“旧”内容中,直到加载新内容为止,然后它会闪现到新内容。

这显然不太理想。我希望列表消失,显示加载动画,然后,在检索到新数据后(从数据库或在线,然后是数据库),它会显示新内容。

我发现this SO question似乎是我想要的,但是......

我在选择菜单后立即设置GONE,然后在导入文章并加载新文章后可见...但在此期间它根本没有消失。我知道GONE代码有效,因为如果我删除了我的VISIBLE代码,那么这些文章就不会再出现了。

我是否需要说“View.GONE”,然后告诉它更新它的可见性或什么?


我的代码(MainActivity):

public static void sectionSelected()
{

    String selectedText = sectionsSpinner.getSelectedItem().toString();
    String[] selectedSection = Section.stringToSection(selectedText);

    //check if it was already the current section
    if(!Section.isEqual(Section.currentSection, selectedText))
    {

        //hides list of articles
        articleEntryListView.setVisibility(View.GONE);

        //sets new currentSection
        Section.currentSection = selectedSection; // Section.stringToSection(sectionsSpinner.getSelectedItem().toString());

        //imports articles (if it's been more than an hour since last import)
        articlesDataSource.importArticles(Section.currentSection, true, false);

        //loads article from database to the list
        loadArticlesIntoList(Section.currentSection);
    }
}

public static void loadArticlesIntoList(String[] section)
{
    //clears the list
    //articleEntryAdapter.clear(); //don't think I need this now that I'm just going to hide it
    //articleEntryAdapter.notifyDataSetChanged();

    //POPULATES THE LIST OF ARTICLES, THROUGH THE ADAPTER
    for(final Article a1 : articlesDataSource.getArticles(section))
    {
        articleEntryAdapter.add(a1);
    }
    articleEntryAdapter.notifyDataSetChanged();

    //shows list of articles
    articleEntryListView.setVisibility(View.VISIBLE);
}

ADDITION:这是我的importAricles()代码:http://pastebin.com/8j6JZBej

1 个答案:

答案 0 :(得分:0)

您必须在对其外观进行更改时使视图无效,因此请在设置可见性后调用articleEntryListView.invalidate()