Android 移植到Kindle Fire时notifyDataSetChanged()出现问题

Android 移植到Kindle Fire时notifyDataSetChanged()出现问题,android,kindle-fire,Android,Kindle Fire,所以我将我的Android应用移植到Kindle上,并期望在兼容性方面有所调整,但这太荒谬了 我发现的第一件事是,如果您也从onCreate()初始化布局,那么显然从onCreate()运行异步任务可能会导致一些问题。在普通的安卓系统中肯定不是这样,但我在Kindle上的最终结果是我的部分布局根本没有显示出来。将AsyncTask移动到onStart解决了问题,但这有点令人惊讶。不过,我在参与这项任务时仍然有问题 此异步任务的目的是从联机加载数据,并在活动的布局中显示结果。非常简单,至少在普通的

所以我将我的Android应用移植到Kindle上,并期望在兼容性方面有所调整,但这太荒谬了

我发现的第一件事是,如果您也从onCreate()初始化布局,那么显然从onCreate()运行异步任务可能会导致一些问题。在普通的安卓系统中肯定不是这样,但我在Kindle上的最终结果是我的部分布局根本没有显示出来。将AsyncTask移动到onStart解决了问题,但这有点令人惊讶。不过,我在参与这项任务时仍然有问题

此异步任务的目的是从联机加载数据,并在活动的布局中显示结果。非常简单,至少在普通的安卓设备上是这样。只需在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();
    }
}
私有类GetAttendes扩展异步任务{
@凌驾
受保护的AttendessectionData doInBackground(无效…参数){
JsonHandler=newJSONHandler(getApplicationContext());
返回jsonHandler.getEventAttendeesFromFb(mEvent.getFacebookEventId(),jsonHandler.FACEBOOK\u FRIENDS\u NO\u LIKES);
}
@凌驾
受保护的void onPostExecute(AttendessectionData数据){
if(data!=null&&!data.isEmpty()){
如果(data.size()>18){
ArrayList toShow=新的ArrayList();
int friendslimit=data.getFriendsAttendingIds().size();
如果(friendLimit>18)
友谊极限=18;
for(int i=0;i18-toShowSizeAfterFriends)
othersLimit=18-朋友之后的Toshowsize;
for(int i=0;i

谢谢

我找到了解决办法。哦,老兄,那花了很长时间,但我终于明白了

这真是愚蠢。基本上,xml属性
android:animateLayoutChanges
将完全破坏您的布局。我猜Kindle会尝试制作动画,但失败了,所以最终结果是什么也没发生。从我的应用程序中删除所有android:animateLayoutChanges的实例解决了这个问题

我希望将来遇到这个问题的其他人能够通过在这个答案上绊倒而节省大量时间