每当页面被选中时更新片段
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();
帮自己一个忙,永远不要将 Context
从 Activity
传给 Fragment
。
从方法参数中删除 context
并使用 Fragment
的 getContext();
代替,因为不再需要 context
param
。
我的应用程序的 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();
帮自己一个忙,永远不要将 Context
从 Activity
传给 Fragment
。
从方法参数中删除 context
并使用 Fragment
的 getContext();
代替,因为不再需要 context
param
。