无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段
Posted
技术标签:
【中文标题】无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段【英文标题】:Unable to refresh/update browsefragment using ArrayObjectAdaptor's clear() and addAll() 【发布时间】:2019-09-28 23:58:10 【问题描述】:我有一个浏览片段,它在调用 php 页面时显示 PHP 生成的 JSON 文件中的行。我试图让浏览片段刷新行,因为 JSON 数据会定期更改。
按照https://hackernoon.com/how-to-refresh-the-android-tv-browsefragment-6e4d2d3c6690 上的说明,我添加了 ArrayOjectAdapter 中的 clear() 和 addAll() 方法。
我的browseFragment的主要部分是:
public class MainFragment extends BrowseSupportFragment
implements LoaderManager.LoaderCallbacks<LinkedHashMap<String, List<Video>>>
private static final int BACKGROUND_UPDATE_DELAY = 300;
private static final String TAG = MainFragment.class.getSimpleName();
static final int GRID_ITEM_WIDTH = 300;
private static final int GRID_ITEM_HEIGHT = 200;
private final Handler mHandler = new Handler();
private ArrayObjectAdapter mRowsAdapter;
private Drawable mDefaultBackground;
private DisplayMetrics mMetrics;
private Runnable mBackgroundTask;
private Uri mBackgroundURI;
private BackgroundManager mBackgroundManager;
private CustomListRow mGridItemListRow;
private LoaderManager mLoaderManager;
private static final int CATEGORY_LOADER = 123;
ArrayList<Video> mItems = null;
private ArrayList<CustomListRow> mVideoListRowArray;
private static final int VIDEO_ITEM_LOADER_ID = 1;
private static PicassoBackgroundManager picassoBackgroundManager = null;
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
prepareBackgroundManager();
setupUIElements();
loadRows();
setRows();
mLoaderManager = LoaderManager.getInstance(this);
mLoaderManager.initLoader(VIDEO_ITEM_LOADER_ID, null, this);
setupEventListeners();
prepareEntranceTransition();
picassoBackgroundManager = new PicassoBackgroundManager(getActivity());
picassoBackgroundManager.updateBackgroundWithDelay("http://twende.phidampalmgardens.com/images/bkground/background1.jpg");
updateRecommendations();
if(mVideoListRowArray != null)
new Handler().postDelayed(new Runnable()
public void run()
//mLoaderManager.restartLoader(CATEGORY_LOADER, null, MainFragment.this);
mRowsAdapter.clear();
mRowsAdapter.addAll(0, mVideoListRowArray);
, 2000);
不幸的是,我仍然无法在不关闭并重新打开应用程序的情况下刷新/更新行
【问题讨论】:
刷新数据并对其做出反应的代码在哪里?根据提供的代码,您似乎只在onActivityCreated
中这样做,这可以解释为什么您必须重新打开应用程序才能看到数据的变化。
【参考方案1】:
尝试添加mRowsAdapter.notifyDataSetChanged();
语句:
mRowsAdapter.clear();
mRowsAdapter.addAll(0, mVideoListRowArray);
mRowsAdapter.notifyDataSetChanged();
【讨论】:
嗨@burakk,感谢您的回复。不幸的是 notifyDataSetChanged() 是在 ArrayAdaptor 类而不是 ArrayObjectAdaptor 所以不能使用它 您确定 mVideoListRowArray 更新正确吗? 请发布更多代码,包括 loadRows、setRows 方法和您的自定义对象适配器。notifyDataSetChanged
是不必要的,addAll
已经调用了notifyItemRangeInserted
。
@BenjaminBreiby 是的,正确的。我认为在自定义适配器的实现中可能会丢失它。现在我看到 mRowsAdapter 是 ArrayObjectAdapter 类型的,所以根本没有使用自定义适配器...?以上是关于无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥