每当选择页面时更新片段

时间:2016-05-25 13:28:51

标签: android android-fragments android-sqlite android-context

我的App的MainActivity中有2个片段。一个片段将从蓝牙设备读取数据并创建数据库。其他将显示此数据(在BarGraph中)。它工作正常。但是,当新数据出现时,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,它通过从DataBase中读取来更新我的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

1 个答案:

答案 0 :(得分:0)

这不是您访问Fragment attachedAdapter的{​​{1}},如果要访问和更新它,您可以使用以下代码而不是创建{{1}每次滚动时都会。

newInstance

现在你可以做到

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

帮自己一个忙,不要将fragment.updateChart(); Context传递到Activity

从方法参数中移除Fragment并使用context的{​​{1}},而不再需要getContext(); Fragment