在我重新启动我的应用程序或切换到我的第三个 TAB 之前,我的 TAB 片段不会刷新

My TAB fragment does not refresh until i restart my application or switch to my 3rd TAB

我的应用程序包含 3 个选项卡,从第一个选项卡开始,我使用一个按钮转到新的 activity。在我的新 activity 上,我将数据保存到 SQLite 数据库。当我 return 返回选项卡时,它不会自动刷新。要将数据放在选项卡上,我必须重新启动应用程序,或者当我移动到第 3 个选项卡时,当我 return 回到第 2 个选项卡时,第 1 个选项卡被销毁并重新创建。 那么如何刷新包含Tab的tab或者Activity。 我的标签代码是:

    public class MedListActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.med_list_activity);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar();

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new HomeFragment(), "Home");
        adapter.addFragment(new PrescriptionFragment(), "Prescriptions");
        adapter.addFragment(new AccountSettingFragment(), "Accounts");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

和我开始新 Activity.

的 Tab 片段
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view=inflater.inflate(R.layout.fragment_home, container, false);
    //       TextView timeText= (TextView)view.findViewById(R.id.textTime);
    //        String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
           // timeText.setText(currentDateTimeString);
            FloatingActionButton addBtn=(FloatingActionButton)view.findViewById(R.id.btnAdd);
            addBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent newActivity;
                    newActivity = new Intent(getActivity(), AddMedication.class);
                    getActivity().startActivity(newActivity);

                }
            });
recyclerViewPassed=(RecyclerView)view.findViewById(R.id.PastMedList);
        recyclerViewup=(RecyclerView)view.findViewById(R.id.UpMedList);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
        recyclerViewPassed.setLayoutManager(linearLayoutManager);
        LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(context);
        recyclerViewup.setLayoutManager(linearLayoutManager2);
        context=getActivity();
        databaseAdaptor=new DatabaseAdaptor(context);
        Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DAY_OF_WEEK);

        switch (day) {
            case Calendar.SUNDAY:
                daysName="Sun";
                break;

            case Calendar.MONDAY:
                daysName="Mon";
                break;

            case Calendar.TUESDAY:
                daysName="Tue";
                break;
            case Calendar.WEDNESDAY:
                daysName="Wed";
                break;

            case Calendar.THURSDAY:
                daysName="Thu";
                break;
            case Calendar.FRIDAY:
                daysName="Fri";
                break;
            case Calendar.SATURDAY:
                daysName="Sat";
                break;
        }
        Calendar cal= Calendar.getInstance();
        SimpleDateFormat simpleDateFormat= new SimpleDateFormat("hh:mm aa");
        initializeData();
        initializeAdapterpassed();
        initializeAdapterup();
        // Inflate the layout for this fragment
        return view;
           }



    private void initializeData() {
       databaseAdaptor.checkDaysName(daysName);
    }
    private void initializeAdapterpassed(){
        RVApassedAdapter adapter = new RVApassedAdapter(databaseAdaptor.passedLists);
       recyclerViewPassed.setAdapter(adapter);
    }
    private void initializeAdapterup(){
        RvUpAdapter adapter = new RvUpAdapter(databaseAdaptor.upList);
        recyclerViewup.setAdapter(adapter);
    }



}

如何在将数据保存到数据库后自动刷新选项卡 Activity。

在 MedListActivity 中,添加以下代码:

@Override
public void onResume(){
    if(viewPager != null && viewPager.getAdapter() != null) {
        viewPager.getAdapter().notifyDataSetChanged();
    }
}

它应该刷新选项卡。

如果这不起作用,请执行以下操作:

  1. 将 Adapter 创建机制(我假设这是您要显示的数据)移动到一个单独的方法,该方法将在 OnCreate 中调用。这不会改变当前行为。
  2. 在 Fragment 中,覆盖 onResume 方法并调用这个新的适配器创建方法。

总结我们的评论讨论,最终的解决方案是在片段代码中添加以下方法:

@Override 
public void onResume() { 
    super.onResume(); 
    // Here we call the data setup methods again, to reflect 
    // the changes which took place then the Fragment was paused
    initializeData(); 
    initializeAdapterpassed(); 
    initializeAdapterup(); 
}