notifyDataSetChanged之后,视图寻呼机未刷新



我花了很多时间,但我无法让它发挥作用。我的主要业务是查看寻呼机。在该活动中,当用户单击按钮时,启动新活动,用户可以在其中向DB添加新项目。完成后,此活动将关闭,用户将返回主活动。问题是我的视图寻呼机在调用onResume时不希望刷新。我调试了它,一切都正常,但列表显示了旧数据。但当我滑动到第三个选项卡并返回到第一个选项卡时,现在数据还可以。所以我在这里读了很多,尝试了可能的、不可能的,但仍然不起作用。第二个问题是,如果我滑动到第二个选项卡,然后返回到第一个,那么这个列表视图是空的,但我不知道为什么。

  • 分页器屏幕外限制是默认的>>RAM中每侧有一页。有人知道什么不好吗?感谢时间和帮助

主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mViewPager = (ViewPager) findViewById(R.id.view_pager);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
            selectedDayTabPosition = position;
            ((OnRefreshListener) mSectionsPagerAdapter.getItem(position)).onRefresh(MainActivity.this, position);
        }
    });
    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setTabListener(MainActivity.this));
    }
}
    @Override
protected void onResume() {
    super.onResume();
    refresh(selectedDayTabPosition);
}
  @Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
public void refresh(final int position) {
    subjectObjLinkedList.clear();
    subjectObjLinkedList = db.getAllSubjects(position, subjectObjLinkedList);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (lvAllSubjectsAtDay != null) {
                subjectsTableAdapter.notifyDataSetChanged();
                Log.d("refresh()", "notifyDataSetChanged");
            }
        }
    });
}

章节页面适配器

      public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        return new PlaceholderFragment();
    }

占位符片段

public class PlaceholderFragment extends Fragment implements OnRefreshListener {
    private TextView tvMainPageNoSubjectLabel;
    private TextView tvMainPageNoSubjectDescLabel;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        lvAllSubjectsAtDay = (ListView) rootView.findViewById(R.id.lvAllSubjectsAtDay);
        subjectsTableAdapter = new SubjectsTableAdapter(getActivity(), subjectObjLinkedList);
        lvAllSubjectsAtDay.setAdapter(subjectsTableAdapter);
        return rootView;
    }
    @Override
    public void onRefresh(Activity activity, int position) {
        refresh(position);
    }
}

好的,我找到了解决方案——它并不完美,但正在发挥作用。我创建了7个单独的片段,并在onResume中的片段类中调用notifyDataChanged。当然,我从活动中删除了所有刷新方法。我不知道为什么以前的解决方案不刷新数据,但这是有效的。

        @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0: return new Fragments.FragmentTab1(db);
            case 1: return new Fragments.FragmentTab2(db);
            case 2: return new Fragments.FragmentTab3(db);
            case 3: return new Fragments.FragmentTab4(db);
            case 4: return new Fragments.FragmentTab5(db);
            case 5: return new Fragments.FragmentTab6(db);
            case 6: return new Fragments.FragmentTab7(db);
            default: return new Fragments.FragmentTab1(db);
        }
    }
 public static class FragmentTab1 extends Fragment {
    private TextView tvMainPageNoSubjectLabel;
    private TextView tvMainPageNoSubjectDescLabel;
    private SubjectsTableAdapter subjectsTableAdapter = null;
    private LinkedList<SubjectObj> objLinkedList = new LinkedList<>();
    private MySQLiteHelper db = null;
    public FragmentTab1(MySQLiteHelper db){
        this.db = db;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        ListView lvAllSubjectsAtDay = (ListView) rootView.findViewById(R.id.lvAllSubjectsAtDay);
        tvMainPageNoSubjectLabel = (TextView) rootView.findViewById(R.id.tvMainPageNoSubjectLabel);
        tvMainPageNoSubjectDescLabel = (TextView) rootView.findViewById(R.id.tvMainPageNoSubjectDescLabel);
        lvAllSubjectsAtDay.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Intent myIntent = new Intent(getActivity(), ConfigSubjectActivity.class);
                myIntent.putExtra("idSelectedSubject", parent.getItemIdAtPosition(position));
                getActivity().startActivity(myIntent);
                return true;
            }
        });
        subjectsTableAdapter = new SubjectsTableAdapter(getActivity(), objLinkedList);
        lvAllSubjectsAtDay.setAdapter(subjectsTableAdapter);
        return rootView;
    }
    @Override
    public void onResume() {
        super.onResume();
        objLinkedList.clear();
        objLinkedList = db.getAllSubjects(0, objLinkedList);
        subjectsTableAdapter.notifyDataSetChanged();
        hideDefaultLabels();
    }
    private void hideDefaultLabels() {
        if (objLinkedList.size() > 0) {
            tvMainPageNoSubjectLabel.setVisibility(View.GONE);
            tvMainPageNoSubjectDescLabel.setVisibility(View.GONE);
        } else {
            tvMainPageNoSubjectLabel.setVisibility(View.VISIBLE);
            tvMainPageNoSubjectDescLabel.setVisibility(View.VISIBLE);
        }
    }
}

最新更新