Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表视图-设置视图。菜单选择不会立即隐藏_Java_Android_Listview_Visibility - Fatal编程技术网

Java 列表视图-设置视图。菜单选择不会立即隐藏

Java 列表视图-设置视图。菜单选择不会立即隐藏,java,android,listview,visibility,Java,Android,Listview,Visibility,TLDR: 我正在设置我的ListView.setVisibilityView.GONE;,但直到后来它才消失。。。我需要让它知道我改变了它的可见性吗?或者我也需要隐藏它的内部元素还是什么 问题描述: 我有一个普通的新闻应用程序。您将看到主要部分的文章列表,然后可以单击选项选择新部分 当用户单击时,部分标题会更改,但是列表中的文章将与旧内容一起坐在那里,直到加载新内容,然后它将闪烁到新内容 这显然并不理想。我希望列表消失,显示加载动画,然后,在从DB或在线检索到新数据后,再从DB显示新内容 我找

TLDR:

我正在设置我的ListView.setVisibilityView.GONE;,但直到后来它才消失。。。我需要让它知道我改变了它的可见性吗?或者我也需要隐藏它的内部元素还是什么

问题描述:

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

当用户单击时,部分标题会更改,但是列表中的文章将与旧内容一起坐在那里,直到加载新内容,然后它将闪烁到新内容

这显然并不理想。我希望列表消失,显示加载动画,然后,在从DB或在线检索到新数据后,再从DB显示新内容

我找到了我想要的,但是

我在选择菜单后立即进行设置,然后在导入文章并加载新文章后显示。。。但在这期间它并没有消失。我知道消失的代码是有效的,因为如果我删除我的可见代码,文章就再也不会出现

我需要说View.GONE,然后告诉它更新它的可见性还是什么

我的代码维护活动:


添加:这是我的importAricles代码:

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

这不会改变任何东西,但现在我的列表数据在加载新节时不会改变。importArticles中的操作有多快?Android会为菜单执行回调吗?在一次扫描中,“消失/可见”将相互抵消,因此您不会看到任何东西消失。这与在按钮的onClick回调中尝试创建一个设置为gone的视图是一样的,暂停一段时间以模拟一些工作,然后再次创建视图。就像在你的例子中一样,即使在很短的一段时间内,你也看不到该视图。@Luksprog-导入文件可能需要大约10秒,有时不太确定,但是。。。一个明显的时间表。我现在可以看到我的日志隐藏了。。。然后延迟下载/导入文章,然后立即显示。菜单是视图顶部的微调器。问题是,即使我删除了我的可见部分(即它将隐藏,但不会返回),它也不会消失,直到导入完成。您在importArticles方法上到底做了什么?你能分享一些代码吗?也不需要调用articleEntryAdapter.notifyDataSetChanged;在您将可见性设置为GONE之后,因为ListView是隐藏的。Luksprog-我已经添加了一个指向importArticles代码的链接。notifyDataSetChange只是一个随机的尝试,目的是让这个可见性工作—我已经删除了它。在您的代码中,我没有看到任何东西会建议您在另一个线程/异步任务中从导入工具执行操作。我说得对吗?如果是这种情况,那么我认为列表只有在导入之后才会消失是正常的,因为它必须等待代码终止,然后UI线程才能真正创建列表,因为它不会立即发生。如果你真的在另一个线程上进行了这些调用,那么我不理解你所经历的行为。
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);
}