每当页面被选中时更新片段

Update a fragment whenever page selected

我的应用程序的 MainActivity 中有 2 个片段。一个片段将从蓝牙设备读取数据并创建一个数据库。其他将显示此数据(在 BarGraph 中)。它工作正常。但是,当新数据到来时,条形图不会动态更新。我实现了一个 PageChangeListener,如果用户更改 BarGraph 片段,它应该按如下方式更新

mViewPager.addOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // TODO Auto-generated method stub
                mSectionsPagerAdapter.instantiateItem(mViewPager, position);
                if(position == 1){
                    AnalyticsFragment.newInstance(position).updateChart(getApplicationContext());
                    //af = new AnalyticsFragment();
                    //af.updateChart();
                }
        }..

AnalyticsFragment(BarGrapg one) 有一个方法 updateChart,它通过从数据库中读取来更新我的 BarGraph

public void updateChart(Context context){
        //Getting weight and time from db
        List<String> list = new ArrayList<String>();
        if(context == null)    //This is because I get NullPointerError here
            return;
        FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(context);
        list = mDbHelper.getAllWeight();
        if (list.isEmpty()){
            Log.w(tag, "List of weights is empty!!");
            return;
        }
        drawgraph(list);
    }

但是,当有新数据时它不会更新。我做错了什么吗?

P.S。这当然不是一个重复的问题。我经历了所有模拟的,发现它们没有帮助。我总是收到这个恼人的错误

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

这不是您访问 Fragment 的方式,即 attached 到您的 Adapter,要访问和更新它,您可以使用下面的代码而不是创建 newInstance 每次滚动。

AnalyticsFragment fragment = (AnalyticsFragment)  viewPager.getAdapter().instantiateItem(viewPager,0/* position of your fragment */);

现在你可以做

fragment.updateChart();

帮自己一个忙,永远不要将 ContextActivity 传给 Fragment

从方法参数中删除 context 并使用 FragmentgetContext(); 代替,因为不再需要 context param