首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwipeRefreshLayout配置

SwipeRefreshLayout配置
EN

Stack Overflow用户
提问于 2015-02-17 16:54:28
回答 2查看 1.5K关注 0票数 0

我正在做一个网络项目,并动态更新信息。关于SwipeRefreshLayout,我有几个问题。

  1. onRefresh()启动后,图标不会停止旋转,即使所有数据都被更新,图标也不会消失。
  2. 当我启动我的应用程序时,有一个白色的屏幕(而信息正在加载)。如果我尝试进行刷新,它将工作,但将加载我的数据的两个副本。是否有办法强制使用onRefresh()方法,或者在加载数据之前禁用它?
  3. 如何在加载数据之前阻止所有操作?

下面是我的代码,让每个人都能理解我在说什么:

主线程:

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_news_page);

    final SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh);
    mSwipeRefreshLayout.setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            na.eraseList();
            new NewsParser().execute();

        }
    });


    mSwipeRefreshLayout.setColorScheme(R.color.red);

    recList = (RecyclerView) findViewById(R.id.cardList);
    recList.setHasFixedSize(true);


     na = new NewsAdapter();
     recList.setAdapter(na);
    new NewsParser().execute();



    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);

AsyncTask

代码语言:javascript
复制
    protected Void doInBackground(Void... params) {
            try {
                doc = Jsoup.connect("http://www.gamedev.net/page/index.html").get();
                Element e = doc.getElementById("featured");
                Elements es = e.getElementsByClass("article_content_inner");



                for (Element el : es) {

                    Element forHeader = el.getElementsByTag("strong").first().getElementsByTag("a").first();

                    String URLforImg = el.getElementsByTag("img").first().attr("src");
                    String forDesc = el.getElementsByClass("article_desc").first().html();
                    forDesc = new String(forDesc.substring(forDesc.indexOf("</a>") + 7,forDesc.length()));
                    na.changeList(new NewCard(forHeader.html(), forDesc, URLforImg, forHeader.attr("href")));
                    runOnUiThread(new Runnable()
                    {
                                      @Override
                                      public void run() {
                                          na.notifyDataSetChanged();
                                      }
                                  }
                    );

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPostExecute(Void params) {

        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 11:43:25

在onRefresh()启动后,图标不会停止旋转,即使所有数据都被更新,图标也不会消失。

使用SwipeRefreshLayout.setRefreshing(false)

当我启动我的应用程序时,有一个白色的屏幕(而信息正在加载)。如果我尝试进行刷新,它将工作,但将加载我的数据的两个副本。有没有办法强制使用onRefresh()方法,或者在加载数据之前禁用它? 如何在加载数据之前阻止所有操作?

SwipeRefreshLayout.setEnabled(false)

票数 2
EN

Stack Overflow用户

发布于 2015-02-17 17:01:33

不能在异步任务中使用新线程。先处理掉它。其次,您应该在onPostExecute方法中更新UI,这就是您需要调用na.notifyDataSetChanged();的地方,在使用异步任务更新/完成禁用加载/刷新动画时,还需要调用swipeLayout.setRefreshing(false);

关于白屏幕--为什么不在填充列表之前放置一个加载旋转器?或者使用旧数据填充列表(您已经在SharedPreferences等中保存或预置了这些数据)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28566707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档