我的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
答案 0 :(得分:0)
这不是您访问Fragment
attached
到Adapter
的{{1}},如果要访问和更新它,您可以使用以下代码而不是创建{{1}每次滚动时都会。
newInstance
现在你可以做到
AnalyticsFragment fragment = (AnalyticsFragment) viewPager.getAdapter().instantiateItem(viewPager,0/* position of your fragment */);
帮自己一个忙,不要将fragment.updateChart();
从Context
传递到Activity
。
从方法参数中移除Fragment
并使用context
的{{1}},而不再需要getContext();
Fragment
。