Android 正在更新ViewPager适配器?
我正在使用随viewPager附带的TableLayout。我使用FragmentStatePager适配器实现了viewPager适配器,因为TableLayout列表很大 ViewPager为每个片段创建一个新的实例,在片段内部,我使用recyclerView查看数据 现在,在启动viewPager之前,我正在呼叫服务器,在成功响应中,我将首次启动viewPager。然后viewPager调用它的getItem()回调函数,从中获取第一个位置的数据,初始化片段并返回recyclerView 它还为下一个位置调用getItem(),因为我已经将offScreenLimit()设置为2,这很好,而且工作正常 问题是,当它调用getItem()并创建片段时,我正在检查是否有数据,如果没有,则进行回调以从服务器获取数据 如果用户访问该位置,我想更新片段回收视图 在这里,我已经在片段中传递了主对象的引用,所以请求成功后,它会更新主对象,更新后的对象将出现在片段列表中 因为这是一个异步调用,所以我想显示一个加载程序,然后更新片段 这就是我的问题所在。我无法更新片段回收视图。它正在更新,但需要时间 我曾经尝试过使用returnPOSITION\u NONE,效果很好,但这不是一个好方法,因为它每次都会创建一个新片段 这是我的viewPagerAdapterAndroid 正在更新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
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;