无法使 FragmentPagerAdapter 更新片段内容
Can't make FragmentPagerAdapter to update Fragments contents
我正在尝试更新传递给我的适配器的数据,从而更新其内容取决于这些数据的片段,
这是适配器:
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
public class ScheduleFragment_Pager_adapter extends FragmentPagerAdapter {
private String CurrentSelectedYearID="",CurrentSelectedTermID="";
public ScheduleFragment_Pager_adapter(FragmentManager fm , String SelectedYearID , String SelectedTermID) {
super(fm);
CurrentSelectedYearID = SelectedYearID;
CurrentSelectedTermID = SelectedTermID;
}
@Override
public Fragment getItem(int position) {
Bundle bundle = new Bundle();
bundle.putString("CurrentSelectedYearID", CurrentSelectedYearID);
bundle.putString("CurrentSelectedTermID",CurrentSelectedTermID);
if(position==0)
{
ClassesFragment classesFragment = new ClassesFragment();
classesFragment.setArguments(bundle);
return classesFragment;
}
else if(position==1)
{
ExamsFragment examsFragment = new ExamsFragment();
examsFragment.setArguments(bundle);
return examsFragment;
}
return null;
}
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Classes";
case 1:
return "Exams";
}
return null;
}
}
我试过使用这个answer,但是没有用,或者我无法理解!
这里是我如何使用适配器以及如何尝试更新它。
在主片段的 onCreateView
[我正在使用嵌套片段]
mViewPager.setAdapter(new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID));
然后我像这样更新适配器
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 0){
if(resultCode == Activity.RESULT_OK){
mSelectedTermID = data.getStringExtra("mSelectedTermID");
mSelectedYearID = data.getStringExtra("mSelectedYearID");
mViewPager.getAdapter().notifyDataSetChanged();
}
}
}
其中,onActivityResult
是 mSelectedTermID
和 mSelectedYearID
正在更新的地方。
有帮助吗?
尝试使用 FragmentStatePagerAdapter
Explained here
FragmentPagerAdapter 存储用户访问的每个页面的所有片段。
通过返回 POSITION_NONE 并且每次调用 notifyDataSetChanged() 适配器都应该删除缓存的片段并重新创建一个新片段。
您是否检查过调用了 notifyDataSetChanged()?
请注意,返回 POSITION_NONE 会松动缓存机制,对于大视图、多个页面,这可能是个问题。
您可以实现观察者模式 - 注册创建的片段,并在需要更新时回调它们。
在片段中创建适配器class变量
private ScheduleFragment_Pager_adapter adapter;
主片段的onCreateView
adapter = new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID)
mViewPager.setAdapter(adapter);
在你的适配器中
public void setValues( String SelectedYearID , String SelectedTermID) {
CurrentSelectedYearID = SelectedYearID;
CurrentSelectedTermID = SelectedTermID;
}
onActivityResult
adapter.setValues(mSelectedTermID, mSelectedYearID);
adapter.notifyDataSetChanged();
我正在尝试更新传递给我的适配器的数据,从而更新其内容取决于这些数据的片段,
这是适配器:
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
public class ScheduleFragment_Pager_adapter extends FragmentPagerAdapter {
private String CurrentSelectedYearID="",CurrentSelectedTermID="";
public ScheduleFragment_Pager_adapter(FragmentManager fm , String SelectedYearID , String SelectedTermID) {
super(fm);
CurrentSelectedYearID = SelectedYearID;
CurrentSelectedTermID = SelectedTermID;
}
@Override
public Fragment getItem(int position) {
Bundle bundle = new Bundle();
bundle.putString("CurrentSelectedYearID", CurrentSelectedYearID);
bundle.putString("CurrentSelectedTermID",CurrentSelectedTermID);
if(position==0)
{
ClassesFragment classesFragment = new ClassesFragment();
classesFragment.setArguments(bundle);
return classesFragment;
}
else if(position==1)
{
ExamsFragment examsFragment = new ExamsFragment();
examsFragment.setArguments(bundle);
return examsFragment;
}
return null;
}
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Classes";
case 1:
return "Exams";
}
return null;
}
}
我试过使用这个answer,但是没有用,或者我无法理解!
这里是我如何使用适配器以及如何尝试更新它。
在主片段的 onCreateView
[我正在使用嵌套片段]
mViewPager.setAdapter(new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID));
然后我像这样更新适配器
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 0){
if(resultCode == Activity.RESULT_OK){
mSelectedTermID = data.getStringExtra("mSelectedTermID");
mSelectedYearID = data.getStringExtra("mSelectedYearID");
mViewPager.getAdapter().notifyDataSetChanged();
}
}
}
其中,onActivityResult
是 mSelectedTermID
和 mSelectedYearID
正在更新的地方。
有帮助吗?
尝试使用 FragmentStatePagerAdapter
Explained here
FragmentPagerAdapter 存储用户访问的每个页面的所有片段。
通过返回 POSITION_NONE 并且每次调用 notifyDataSetChanged() 适配器都应该删除缓存的片段并重新创建一个新片段。
您是否检查过调用了 notifyDataSetChanged()?
请注意,返回 POSITION_NONE 会松动缓存机制,对于大视图、多个页面,这可能是个问题。
您可以实现观察者模式 - 注册创建的片段,并在需要更新时回调它们。
在片段中创建适配器class变量
private ScheduleFragment_Pager_adapter adapter;
主片段的onCreateView
adapter = new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID)
mViewPager.setAdapter(adapter);
在你的适配器中
public void setValues( String SelectedYearID , String SelectedTermID) {
CurrentSelectedYearID = SelectedYearID;
CurrentSelectedTermID = SelectedTermID;
}
onActivityResult
adapter.setValues(mSelectedTermID, mSelectedYearID);
adapter.notifyDataSetChanged();