一直在此卡住。Android - 將項目添加到片段更新中的列表視圖
我目前有3個片段,每個包含列表 - A | B | C(收藏夾)
A和B從在線檢索數據,C是離線收藏列表。
當用戶最喜歡A的東西時,它會立即顯示在收藏夾列表中,因爲ViewPageAdapter會從屏幕上加載另外一頁。所以A | B已經加載,這意味着當我去收藏夾(C)它必須重新加載。
我的問題是 - 當我在B中最喜歡的東西時,應用程序拒絕重新加載收藏夾(C),因爲當我點擊B時C已經被加載,唯一能看到我添加的東西是刷新應用程序。
我曾嘗試:
更改setOffscreenPageLimit();爲0,所以它必須每次重新加載每個片段 - 即使笨重只是爲了看到它的工作,它仍然拒絕。
NotifyDataSetChanged也沒有工作,或者我不正確地理解它。
InstatiateItem在ViewPageAdapter,但不能得到那工作,找不到它的一個很好的例子來理解
創建在喜歡代碼的新listadapter只是設法得到它加載新的數據 - 我可以在它被添加到收藏列表的日誌中看到,但它只是沒有被該ViewPageAdapter
很多谷歌搜索的
什麼情況是,關於重載當用戶從B轉到C時,沒有新的代碼運行,因爲C的代碼全部運行,一旦我點擊B,它就直接進入C的列表。
我使用谷歌的SlidingTabLayout和SlidingTabStrip的碎片,一切正常,沒有任何改變。這裏找到 - https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.html
代碼:
public void favourite()
{
//if the user wants to favourite
ParseQuery<ParseObject> query = ParseQuery.getQuery("Favourite");
//queries the id from the local data store in-case they have already favourited
query.whereEqualTo("id",id);
query.fromLocalDatastore();
query.getFirstInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e)
{
if(object!=null)
{
Toast.makeText(getApplicationContext(),"You have already pinned this",Toast.LENGTH_SHORT).show();
}
else
{
//otherwise create a new ParseObject and save the id,title and backdrop to
//the local datastore
final ParseObject favouriteShow = new ParseObject("FavouriteShow");
favouriteShow.put("id", id);
favouriteShow.put("title", title);
favouriteShow.put("backdrop", backdropPath);
favouriteShow.pinInBackground();
Toast.makeText(getApplicationContext(),"Pinned - "+ title,Toast.LENGTH_SHORT).show();
//need to set favourite as null for it to redraw with the favourited icon
mFavourite.setImageDrawable(null);
mFavourite.setImageResource(R.drawable.favourited_already);
}
}
});
}
ViewPagerAdapter:
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
CharSequence Titles[];
int tabNumber;
public ViewPagerAdapter(FragmentManager fm, CharSequence[] mTitles, int mTabNumber) {
super(fm);
this.Titles = mTitles;
this.tabNumber = mTabNumber;
}
@Override
public Fragment getItem(final int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new FragmentA();
break;
case 1:
fragment = new FragmentB();
break;
case 2:
fragment = new FavouritesFragmentC();
break;
}
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return Titles[position];
}
@Override
public int getCount() {
return tabNumber;
}
}
非常感謝您的幫助。
亞當
這應該工作,@ AdamFirst –
感謝您的。我一直在使用我的SlidingTabLayout中的onPageSelected,並使用簡單的if(位置== 2),當用戶滑過它時可以識別最喜歡的Fragment。認爲你是對的,這將是一條路。我的下一部分是實現回調。任何好的例子? –
接受答案,如果你得到它的工作..接口回調將工作良好。 – suresh