Fragment - Recycler 视图不刷新Fragment 实例创建一次

问题描述

我用五个片段创建了底部导航,单击选项卡时不会一次又一次地重新创建。这样做是为了减少 API 调用数量。在所有片段中都存在回收器视图,并且还实现了拉动刷新。当我拉动刷新,从服务器获取数据,但回收站视图没有更新时,问题就出现了。 请说明我做错了什么。

底部导航.class

  @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_std_bottom_bar);
    studentSchoolDataBaseController = Application.getInstance().getStudentSchoolDataBaseController();
    studentApiController = new StudentApiController(this);
    studentAbsenceApiController = new StudentAbsenceApiController(this);
    studentCoursesApiController = new StudentCoursesApiController(this);
    studentBottomNavView = (BottomNavigationView) findViewById(R.id.navigation1);
    CustomFont.cairo_font(getApplicationContext(),studentBottomNavView);
    if (getIntent().getExtras() != null) {
        notificationType = getIntent().getExtras().getString("type");
        comesFromNotification = true;
        msgFrom = getIntent().getExtras().getString(StaticConfig.CHAT_MSG_USER_TYPE);
    }
    fragmentManager.beginTransaction().add(R.id.main_container,studCurrCourseFragment,"1").hide(studCurrCourseFragment).commit();
    fragmentManager.beginTransaction().add(R.id.main_container,stdPointsFragment,"2").hide(stdPointsFragment).commit();
    fragmentManager.beginTransaction().add(R.id.main_container,stdHome,"3").commit();
    fragmentManager.beginTransaction().add(R.id.main_container,stdTaskAndHw,"4").hide(stdTaskAndHw).commit();
     fragmentManager.beginTransaction().add(R.id.main_container,stdRealtimeChat,"5").hide(stdRealtimeChat).commit();
    showLoadingDialog();
    Handler handler = new Handler(Looper.getMainLooper());


    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //hide Progressbar here or close your activity.
            if(progressDialog!=null && progressDialog.isShowing())
            {
                progressDialog.dismiss();
            }

        }
    },10*1000);

    BottomNavigationViewHelper.removeNavigationShiftMode(studentBottomNavView);
    studentBottomNavView.setonNavigationItemSelectedListener
            (new BottomNavigationView.OnNavigationItemSelectedListener() {
                Fragment fragment = null;

                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    Fragment selectedFragment = null;

                    switch (item.getItemId()) {
                        case R.id.navigation_std_current_course:
                            
fragmentManager.beginTransaction().hide(active).show(studCurrCourseFragment).commit();
                            active = studCurrCourseFragment;

                            isHome = false;
                            return true;
                        case R.id.navigation_std_points:

                            
fragmentManager.beginTransaction().hide(active).show(stdPointsFragment).commit();
                            active = stdPointsFragment;
                            isHome = false;
                            return true;
                        case R.id.navigation_std_home:

                            
fragmentManager.beginTransaction().hide(active).show(stdHome).commit();
                            active = stdHome;
                            isHome = true;
                            return true;
                        case R.id.navigation_std_task_hw:

                            
 fragmentManager.beginTransaction().hide(active).show(stdTaskAndHw).commit();
                            active = stdTaskAndHw;
                            isHome = false;
                            return true;
                        case R.id.navigation_chat
                            
  fragmentManager.beginTransaction().hide(active).show(stdRealtimeChat).commit();
                            active = stdRealtimeChat;
                            isHome = false;
                            return true;
                    }
                    return false;
                }
            });
    studentBottomNavView.setonNavigationItemReselectedListener(new 
 BottomNavigationView.OnNavigationItemReselectedListener() {
        @Override
        public void onNavigationItemReselected(@NonNull MenuItem item) {
            //Toast.makeText(BottomStdNavigation.this,"Reselected",Toast.LENGTH_SHORT).show();

        }
    });
   
    setNavigationTypeface();

}

在下面添加我的片段类之一

标准点.java

 @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new ActionBarCustomization(getActivity(),"",R.layout.include_navbar_add_points);
    initializeView();


}

@Override
public void onStart() {
    super.onStart();
}


public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_std_points,container,false);
    findViews(rootView);
    pointsReplaceBtn.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getActivity(),StudentPointsReplaceActivity.class);
            startActivity(intent);
        }
    });

    swipeRefreshLayout.setonRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            initializeView();
            swipeRefreshLayout.setRefreshing(false);
        }
    });
    return rootView;
}

@Override
public void onPause() {
    super.onPause();
}

@Override
public void onResume() {
    super.onResume();
}

private void initializeView() {
  //  new ActionBarCustomization(getActivity(),R.layout.include_toolbar_back);
    studentPointsApiController = new StudentPointsApiController(getActivity());
    getPointsDetails();
    getReplacePointsRequests();


}
private void findViews(View view) {
    recyclerView = (RecyclerView)view. findViewById(R.id.student_points_details_recycler_view);
    pointsReplacerecyclerView = (RecyclerView) view.findViewById(R.id.student_points_replace_sent_requests_recycler_view);
    pointsReplacerecyclerView.setLayoutManager(new linearlayoutmanager(getContext(),linearlayoutmanager.HORIZONTAL,true));
    swipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.std_pts_refresh_id);
    studentPointsDetailsTotal = (CustomTextView)view.findViewById(R.id.student_points_details_total);
    studentPointsDetailsReplaced = (CustomTextView)view. findViewById(R.id.student_points_details_replaced);
    studentPointsDetailsRemain = (CustomTextView)view. findViewById(R.id.student_points_details_remain);
    pointsReplaceBtn = (CustomButton)view.findViewById(R.id.addStdPointBtnID);
}

private void initializeRecyclerAdapter() {
    studentPointsDetailsRecyclerAdapter = new StudentPointsDetailsRecyclerAdapter(getActivity(),studentBalance.getBalanceDetails());
    RecyclerView.LayoutManager mLayoutManager = new linearlayoutmanager(getActivity());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(studentPointsDetailsRecyclerAdapter);
    //setData();
}

public void getPointsDetails() {
    studentPointsApiController.getPointsDetails(new ObjectCallback() {
        @Override
        public void onSuccess(Object o) {
            studentBalance = ((StudentBalance) o);
            setData();
            initializeRecyclerAdapter();
        }

        @Override
        public void onFailed() {

        }
    });
}

private void getReplacePointsRequests() {
    studentPointsApiController.getStudentPointsReplaceRequests(new ListCallback() {
        @Override
        public void onSuccess(List<Object> objects) {
            replacedPoints.clear();
            replacedPoints.addAll((List<ReplacedPoints>) (List<?>) objects);
            pointsReplaceRequestsRecyclerAdapter = new 
 PointsReplaceRequestsRecyclerAdapter(getContext(),replacedPoints,StdPoints.this);
 //              RecyclerView.LayoutManager mLayoutManager1 = new 
            linearlayoutmanager(getContext());
  //              recyclerView.setLayoutManager(mLayoutManager1);
            pointsReplacerecyclerView.setItemAnimator(new DefaultItemAnimator());
            pointsReplacerecyclerView.setAdapter(pointsReplaceRequestsRecyclerAdapter);
        }

        @Override
        public void onFail() {

        }
    });
}

适配器类

StudentPointsDetailsReclyerAdaper.java

 private Context context;
private List<BalanceDetails> balanceDetails = new ArrayList<>();

public StudentPointsDetailsRecyclerAdapter(Context context,List<BalanceDetails> 
 balanceDetails) {
    this.context = context;
    this.balanceDetails = balanceDetails;
}

@NonNull
@Override
public StudentPointsDetailsHolder onCreateViewHolder(@NonNull ViewGroup parent,int 
viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_points_details,parent,false);
    return new StudentPointsDetailsHolder(view,context);
}

@Override
public void onBindViewHolder(@NonNull StudentPointsDetailsHolder holder,int position) {
    holder.setData(balanceDetails.get(position));
}

@Override
public int getItemCount() {
    return balanceDetails.size();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...