Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在更新ViewPager适配器?_Android_Android Viewpager_Android Recyclerview_Android Tablayout_Fragmentstatepageradapter - Fatal编程技术网

Android 正在更新ViewPager适配器?

Android 正在更新ViewPager适配器?,android,android-viewpager,android-recyclerview,android-tablayout,fragmentstatepageradapter,Android,Android Viewpager,Android Recyclerview,Android Tablayout,Fragmentstatepageradapter,我正在使用随viewPager附带的TableLayout。我使用FragmentStatePager适配器实现了viewPager适配器,因为TableLayout列表很大 ViewPager为每个片段创建一个新的实例,在片段内部,我使用recyclerView查看数据 现在,在启动viewPager之前,我正在呼叫服务器,在成功响应中,我将首次启动viewPager。然后viewPager调用它的getItem()回调函数,从中获取第一个位置的数据,初始化片段并返回recyclerView

我正在使用随viewPager附带的TableLayout。我使用FragmentStatePager适配器实现了viewPager适配器,因为TableLayout列表很大

ViewPager为每个片段创建一个新的实例,在片段内部,我使用recyclerView查看数据

现在,在启动viewPager之前,我正在呼叫服务器,在成功响应中,我将首次启动viewPager。然后viewPager调用它的getItem()回调函数,从中获取第一个位置的数据,初始化片段并返回recyclerView

它还为下一个位置调用getItem(),因为我已经将offScreenLimit()设置为2,这很好,而且工作正常

问题是,当它调用getItem()并创建片段时,我正在检查是否有数据,如果没有,则进行回调以从服务器获取数据

如果用户访问该位置,我想更新片段回收视图

在这里,我已经在片段中传递了主对象的引用,所以请求成功后,它会更新主对象,更新后的对象将出现在片段列表中

因为这是一个异步调用,所以我想显示一个加载程序,然后更新片段

这就是我的问题所在。我无法更新片段回收视图。它正在更新,但需要时间

我曾经尝试过使用returnPOSITION\u NONE,效果很好,但这不是一个好方法,因为它每次都会创建一个新片段

这是我的viewPagerAdapter

public class ShowTimeViewPageAdapter extends FragmentStatePagerAdapter {

    private static final String TAG = ShowTimeViewPageAdapter.class.getSimpleName();

    private Context mContext;
    private List<String> mDateStringList;
    private FragmentManager fragmentManager;
    private IShowTimeActivity mIShowTimeActivity;

    private List<String> mDateCodes;
    private LinkedHashMap<String, List<Venue>> mVenueHashMap;

    public ShowTimeViewPageAdapter(FragmentManager fm, Context context, IShowTimeActivity showTimeActivity, List<String> createdDates, List<String> dateCodes, LinkedHashMap<String, List<Venue>> venueHashMap) {
        super(fm);
        this.mContext = context;
        this.mIShowTimeActivity = showTimeActivity;
        this.fragmentManager = fm;
        this.mDateCodes = dateCodes;
        this.mVenueHashMap = venueHashMap;
        this.mDateStringList = createdDates;
    }

    private String getDateCode(int pos) {
        String dateCode = null;
        try {
            dateCode = mDateCodes.get(pos);
        } catch (IndexOutOfBoundsException e) {
            Logger.d(TAG, "Index out of bound");
        }
        return dateCode;
    }

    private List<Venue> getVenuesList(String dateCode) {
        return mVenueHashMap.get(dateCode);
    }

    @Override
    public Fragment getItem(int position) {
        if (getDateCode(position) != null) {
            if (getVenuesList(getDateCode(position)) == null) {
                if(position!=0){
                    mIShowTimeActivity.requestForTheVenueListByDateCode(getDateCode(position), position);
                }
            }
        }
        ShowTimeFragment showTimeFragment = ShowTimeFragment.newInstance(mDateStringList.get(position).split(";")[2]);
        fragmentManager.beginTransaction().add(showTimeFragment,""+position);
        return showTimeFragment;
    }

    @Override
    public int getCount() {
        return mDateStringList.size();
    }

    public View getTabView(int position) {
        String[] dateStr = mDateStringList.get(position).split(";");
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View tabView = layoutInflater.inflate(R.layout.show_time_tab_layout, null, false);
        TextViewRoboto day = (TextViewRoboto) tabView.findViewById(R.id.show_time_tab_day);
        TextViewRoboto date = (TextViewRoboto) tabView.findViewById(R.id.show_time_tab_date);
        day.setText(dateStr[0]);
        date.setText(dateStr[1]);
        return tabView;
    }

}
public类ShowTimeViewPageAdapter扩展了FragmentStatePagerAdapter{
私有静态最终字符串标记=ShowTimeViewPageAdapter.class.getSimpleName();
私有上下文;
私有列表mDateStringList;
私人碎片管理器碎片管理器;
私人Ishowtime活动Mishowtime活动;
私有列表mdatecode;
私有LinkedHashMap mVenueHashMap;
public ShowTimeViewPageAdapter(FragmentManager fm、上下文上下文、IShowTimeActivity showTimeActivity、List createdDates、List dateCodes、LinkedHashMap venueHashMap){
超级(fm);
this.mContext=上下文;
this.mIShowTimeActivity=showTimeActivity;
this.fragmentManager=fm;
this.mDateCodes=日期代码;
this.mVenueHashMap=venueHashMap;
this.mDateStringList=createdDates;
}
私有字符串getDateCode(int-pos){
字符串dateCode=null;
试一试{
dateCode=mDateCodes.get(pos);
}catch(IndexOutOfBoundsException e){
Logger.d(标记“索引越界”);
}
返回日期代码;
}
私有列表getVenuesList(字符串日期代码){
返回mVenueHashMap.get(日期代码);
}
@凌驾
公共片段getItem(int位置){
如果(getDateCode(位置)!=null){
if(getVenuesList(getDateCode(position))==null){
如果(位置!=0){
mIShowTimeActivity.请求VenueListByDateCode(getDateCode(position),position);
}
}
}
ShowTimeFragment ShowTimeFragment=ShowTimeFragment.newInstance(mDateStringList.get(position.split)(“;”[2]);
fragmentManager.beginTransaction().add(showTimeFragment,“+位置);
返回显示时间段;
}
@凌驾
public int getCount(){
返回mDateStringList.size();
}
公共视图getTabView(内部位置){
String[]dateStr=mDateStringList.get(position.split(“;”);
LayoutInflater LayoutInflater=LayoutInflater.from(mContext);
视图选项卡View=LayoutFlater.inflate(R.layout.show\u time\u tab\u layout,null,false);
TextViewRoboto day=(TextViewRoboto)tabView.findViewById(R.id.show\u time\u tab\u day);
TextViewRoboto日期=(TextViewRoboto)tabView.findViewById(R.id.show\u time\u tab\u date);
day.setText(dateStr[0]);
date.setText(dateStr[1]);
返回选项卡视图;
}
}
这是片段

public class ShowTimeFragment extends Fragment {

    @Bind(R.id.show_time_fragment_recycler_view)        RecyclerView mShowTimeRecyclerView;
    @Bind(R.id.show_time_fragment_no_data_text_view)    TextViewRoboto mShowTimeNoDataTextView;

    private static LinkedHashMap<String, List<Venue>> mVenueList = ShowTimeActivity.mVenueHashMap;

    private ShowTimeRecyclerViewAdapter mShowTimeRecyclerViewAdapter;
    private static final String KEY_CODE = "date_key";

    public ShowTimeFragment() {
    }

    public static ShowTimeFragment newInstance(String dateCode) {
        Bundle bundle = new Bundle();
        bundle.putString(KEY_CODE, dateCode);
        ShowTimeFragment showTimeFragment = new ShowTimeFragment();
        showTimeFragment.setArguments(bundle);
        return showTimeFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.show_time_fragment, container, false);
        ButterKnife.bind(this, view);


        String code = getArguments().getString(KEY_CODE);

        List<Venue> venueList = mVenueList.get(code);

        if (venueList != null && venueList.size() > 0) {
            mShowTimeRecyclerView.setVisibility(View.VISIBLE);
            mShowTimeNoDataTextView.setVisibility(View.GONE);

            mShowTimeRecyclerViewAdapter = new ShowTimeRecyclerViewAdapter(venueList, getContext());
            mShowTimeRecyclerView.setAdapter(mShowTimeRecyclerViewAdapter);

            CustomLinearLayoutManager cl = new CustomLinearLayoutManager(getActivity(), 1, false);
            mShowTimeRecyclerView.setLayoutManager(cl);

            RecyclerView.OnItemTouchListener disabler = new RecyclerViewDisabler();
            mShowTimeRecyclerView.addOnItemTouchListener(disabler);        // disables scrolling
        } else {
            mShowTimeNoDataTextView.setVisibility(View.VISIBLE);
            mShowTimeRecyclerView.setVisibility(View.GONE);
            mShowTimeNoDataTextView.setText("NO Data Available");
        }

        return view;
    }

    public class RecyclerViewDisabler implements RecyclerView.OnItemTouchListener {

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            return true;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    }

    protected void addFragment(int containerViewId, Fragment fragment, String fragmentTag) {
        getActivity().getSupportFragmentManager().beginTransaction().add(containerViewId, fragment, fragmentTag).disallowAddToBackStack().commit();
    }

    public void onDestroyView() {
        super.onDestroyView();

    }
}
公共类ShowTimeFragment扩展片段{
@绑定(R.id.show\u time\u fragment\u recycler\u view)RecyclerView MShowtimeCyclerView;
@绑定(R.id.show_time_fragment_no_data_text_view)文本视图roboto mshowtimenodeatatexview;
私有静态LinkedHashMap mVenueList=ShowTimeActivity.mVenueHashMap;
私人ShowTimeRecycleServiceAdapter MSShowTimeRecycleServiceAdapter;
私有静态最终字符串密钥\u CODE=“日期\u密钥”;
公共ShowTimeFragment(){
}
公共静态ShowTimeFragment newInstance(字符串日期代码){
Bundle=新Bundle();
bundle.putString(键代码、日期代码);
ShowTimeFragment ShowTimeFragment=新的ShowTimeFragment();
showTimeFragment.setArguments(bundle);
返回显示时间段;
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.show\u time\u片段,容器,false);
ButterKnife.bind(这个,视图);
字符串代码=getArguments().getString(键代码);
List-venueList=mVenueList.get(代码);
if(venueList!=null&&venueList.size()>0){
mShowTimeRecyclerView.setVisibility(View.VISIBLE);
mshowtimenodeatatextview.setVisibility(View.GONE);
mshowtimeRecycleServiceAdapter=新的showtimeRecycleServiceAdapter(venueList,getContext());
setAdapter(mshowtimeRecycleServiceAdapter);
CustomLinearLayoutManager cl=新的CustomLinearLayoutManager(getActivity(),1,false);
mShowTimeRecyclerView.setLayoutManager(cl);
RecyclerView.OnItemTouchListener disabler=新的RecyclerViewDisabler();
mshowtimecollercerview.addonimtouchlistener(disabler);//禁用滚动
}否则{
mshowtimenodeatatextview.setVisibility(View.VISIBLE);
private static LinkedHashMap<String, List<Venue>> mVenueList = ShowTimeActivity.mVenueHashMap;