Android Can';t使FragmentPagerAdapter更新片段内容
我试图更新传递给适配器的数据,从而更新内容依赖于这些数据的片段 这是地址:Android Can';t使FragmentPagerAdapter更新片段内容,android,android-viewpager,fragmentpageradapter,Android,Android Viewpager,Fragmentpageradapter,我试图更新传递给适配器的数据,从而更新内容依赖于这些数据的片段 这是地址: import android.app.Fragment; import android.app.FragmentManager; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; public class ScheduleFragment_Pager_adapter extends FragmentPagerAda
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;
}
}
我尝试过使用这个,但它不起作用,或者我无法理解它
下面是我如何使用适配器以及如何尝试更新它
在主片段的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
FragmentPagerAdapter存储用户访问的每个页面的所有片段 通过返回位置\u NONE,每个调用notifyDataSetChanged()适配器都应该删除缓存的片段并重新创建一个新的片段 是否检查是否调用了notifyDataSetChanged() 请注意,通过返回POSITION_NONE,您将失去缓存机制,对于大视图、多页,这可能是一个问题
您可以实现观察者模式-注册创建的片段,并在需要更新时调用它们。在片段中设置适配器类变量
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();
我试过了,但是没有什么不同,仍然没有更新这些适配器用于不同的目的。选择取决于页面数量和视图大小。如何将mSelectedTermID和mSelectedYearID传递给适配器?我看到您将它们传递给构造函数,但稍后要更新适配器如何传递它们?@temna_nich、
mSelectedTermID
、mSelectedYearID
都是全局变量,在我调用setAdapter
之前,在onCreateView
中为它们赋值,这使适配器工作正常,然后这些值可以在ActivityResult上更改,我没有再次传递它们--我应该再次传递吗,,,这就是你想要的吗?添加日志消息或断点并检查mviewpage.getAdapter().notifyDataSetChanged()已调用代码>。确实应该尝试。当您将它们传递给构造函数时,这就是它们进入适配器的方式。但我不知道更新后如何传递它们。尝试使用setter方法。为此,您需要将适配器作为变量存储在片段中,并更新其中的值。@temna_nich,如何将它们再次传递给构造函数,我使用的是mViewPager.getAdapter()
,当然,您可以这样写,这正是我使用您再次传递数据的建议所做的。非常感谢您,我使用了FragmentStatePagerAdapter
而不是FragmentPagerAdapter
,并通过始终返回POSITION\u NONE
来覆盖getItemPosition
,并将数据再次传递给adapater,这很有效,但是是否有其他有效的方法来覆盖我的getItemPosition
是,我明白你的意思了,但是你能在getItemPosition
的代码方面给我一点帮助吗。在设置/更新适配器时,我做了以下操作:Object[]Frags={newclassesfragment(),newexamfragment()}
并将其传递给Adapter为什么要覆盖getItemPosition?我检查了我的适配器,我从来没有覆盖过这个方法,你能尝试删除它吗?FragmentStatePagerAdapter
对我来说很好,然而,我已经将getItemPosition
实现为始终POSITION\u NONE
,但是有没有其他有效的方法来实现它呢?Observer模式与FragmentStatePagerAdapter,但其思想是相同的。这对我来说是多么先进