android – 移植到Kindle Fire时notifyDataSetChanged()的问题

android – 移植到Kindle Fire时notifyDataSetChanged()的问题,第1张

概述所以我将我的 Android应用程序移植到Kindle,并期望对兼容性进行一些调整,但这太荒谬了. 我发现的第一件事是,如果你也从onCreate()初始化你的布局,显然从onCreate()运行AsyncTask可能会导致一些问题.这在普通的Android中绝对不是这样,但是我在Kindle上获得的最终结果是我的布局部分根本没有显示.将AsyncTask移动到onStart解决了这个问题,但这有 所以我将我的 Android应用程序移植到Kindle,并期望对兼容性进行一些调整,但这太荒谬了.

我发现的第一件事是,如果你也从onCreate()初始化你的布局,显然从onCreate()运行AsyncTask可能会导致一些问题.这在普通的AndroID中绝对不是这样,但是我在Kindle上获得的最终结果是我的布局部分根本没有显示.将AsyncTask移动到onStart解决了这个问题,但这有点令人惊讶.我仍然有一个问题,即调用此AsyncTask.

此AsyncTask的目的是从在线加载数据并将结果显示在活动的布局中.非常简单,至少在普通的AndroID设备上.只需在doInBackground中加载数据,然后在onPostExecute中将数据应用到UI以构建页面.

但是,在某些情况下(并非所有),AsyncTask中的数据似乎不会显示在屏幕上.例如,某些数据显示在GrIDVIEw中.我更新GrIDVIEw适配器,使用适配器的notifyDataSetChanged()方法,应该发生的是视图被更改为显示来自适配器的数据.普通AndroID设备上的此过程运行正常.

然而,在这个Kindle上数据没有加载(在某些情况下,并非全部,这使得这更令人沮丧).我发现如果按下Kindle上的后退按钮,然后将手指从它上面移开(因此不会调用finish()),数据有时会显示出来!我觉得对于Kindle的AndroID版本,notifyDataSetChanged()的正常行为已被改变,但我不确定我还希望将其他数据加载到适配器中.

有没有人遇到过这个问题?

此外,我应该注意,它有时只发生,实际的数据结构保持不变,但对于某些页面它可以工作而其他页面没有(应用程序属于音乐,所以例如一个艺术家的页面正确加载而另一个才不是).

我已经包含了AsyncTask,它可以在任何AndroID设备上完美运行,所以我不知道它会有什么用处,但无论如何它仍然存在:

private class GetAttendees extends AsyncTask<VoID,VoID,AttendeesSectionData> {    @OverrIDe    protected AttendeesSectionData doInBackground(VoID... params) {        JsonHandler JsonHandler = new JsonHandler(getApplicationContext());        return JsonHandler.getEventAttendeesFromFb(mEvent.getFacebookEventID(),JsonHandler.FACEBOOK_FRIENDS_NO_liKES);    }    @OverrIDe    protected voID onPostExecute(AttendeesSectionData data) {        if(data != null && !data.isEmpty()) {            if(data.size() > 18) {                ArrayList<String> toShow = new ArrayList<String>();                int frIEndlimit = data.getFrIEndsAttendingIDs().size();                if(frIEndlimit > 18)                    frIEndlimit = 18;                for(int i = 0; i < frIEndlimit; i++)                    toShow.add(data.getFrIEndsAttendingIDs().get(i).getimageURL());                int toShowSizeAfterFrIEnds = toShow.size();                if(toShowSizeAfterFrIEnds < 18) {                    int otherslimit = data.getNonFrIEndsAttendingIDs().size();                    if(otherslimit > 18 - toShowSizeAfterFrIEnds)                        otherslimit = 18 - toShowSizeAfterFrIEnds;                    for (int i = 0; i < otherslimit; i++)                        toShow.add(data.getNonFrIEndsAttendingIDs().get(i).getimageURL());                }                mFbImagesAdapter.setItems(toShow);            }            else                mFbImagesAdapter.setItems(data.unloadIntoOneArrayList());            String caption = String.format(AppSettings.ATTENDEE_header_CAPTION,//fill in the %s with:                    data.getFrIEndsAttendingIDs().size(),data.getNonFrIEndsAttendingIDs().size());            caption = caption.replace("*","<b>");            caption = caption.replace("?","</b>");            mAttendeesCaption.setText(HTML.fromHTML(caption));            calculateGrIDSize(data.size());        }        else {            Print.log("no attendees for event " + mEvent.getVenue_FormattedLocation());            mAttendeesGrID.setVisibility(VIEw.GONE);            mAttendeesheaderContainer.setVisibility(VIEw.GONE);        }        loadFacebookImages();    }}

谢谢!

解决方法 我找到了解决方案.哦,那人花了很长时间,但我终于明白了.

真的很蠢.基本上,xml属性androID:animateLayoutChanges将完全破坏你的布局.我想Kindle会尝试动画,但会失败,所以最终的结果就是没有发生.从我的应用程序中删除所有androID:animateLayoutChanges实例修复了问题.

我希望将来有这个问题的其他人可以通过绊倒这个答案来节省大量时间.

总结

以上是内存溢出为你收集整理的android – 移植到Kindle Fire时notifyDataSetChanged()的问题全部内容,希望文章能够帮你解决android – 移植到Kindle Fire时notifyDataSetChanged()的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1141006.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存