【发布时间】:2018-07-12 17:48:00
【问题描述】:
我在 viewpager 中有几个片段,我在第一个片段中设置了一些值 我必须用第一个片段中的值更新下一个片段,所以我将在第一个片段中创建的值存储在数据库中我正在尝试使用数据库中的值更新下一个视图,我正在使用 Room 作为数据库,现在我正在尝试遵循此答案How to determine when fragment becomes visible in viewpager 中描述的方法,而我正在做的是我'正在创建一个新线程来访问数据库并从数据库更新全局变量bodyScore。这是一些代码
public class MindFragment extends Fragment implements FragmentLifecycle {
SeekBar mindSeekBar;
private View rootView;
ViewPager viewPager;
private int seekBarProgress;
private Date date = new Date();
private static final String TAG = MindFragment.class.getSimpleName();
private LifeWheelView lview;
private volatile int bodyScore;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_fill, container, false);
viewPager = getActivity().findViewById(R.id.viewpager);
lview = rootView.findViewById(R.id.lifeWheelView);
lview.setMind(bodyScore, 0);
}
@Override
public void onResumeFragment() {
Log.i(TAG, "onResumeFragment()");
Thread thread = new Thread(new Runnable() {
ScoreDao mScoreDao;
CategoryDao mCategoryDao;
@Override
public void run() {
LifewheelRoomDatabase db = LifewheelRoomDatabase.getDatabase(getContext());
mScoreDao = db.scoreDao();
mCategoryDao = db.categoryDao();
CategoryName categoryName = mCategoryDao.getCategoryByName("Body");
Integer category_id = categoryName.getId();
int bodyScoreExceptionFlag = 0;
while ( bodyScoreExceptionFlag == 0 ) {
try {
Score st = mScoreDao.getScoreByCategory(HelperMethods.getStartOfDay(), HelperMethods.getEndOfDay(), category_id);
if( st == null) {
bodyScore = 0;
}
else {
bodyScore = st.score;
}
bodyScoreExceptionFlag++;
} catch (NullPointerException e) {
continue;
}
}
}
});
thread.start();
lview.setMind(bodyScore, 0);
}
}
在线lview.setMind(bodyScore,0); 我收到了NullPointerException。
所以我的问题是:
如果 Fragment 在查看之前已创建,则应初始化
lview变量。以及当它变得可见时,为什么当我尝试对其调用方法时为什么会出现此异常。-
当从视图分页器中的数据库更新视图(不是列表或回收器视图)时,应如何处理此类事情,其中后续视图将使用最后一个视图的输入进行更新。
【问题讨论】:
标签: java android android-fragments android-viewpager android-room