我的目标是在推送通知显示对话框后向listView添加数据,如果用户按是,应用程序将显示带有片段的活动,并再次显示新对话框以添加新项目。但如果我按添加,我会得到:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.LoaderManager android.support.v4.app.FragmentActivity.getSupportLoaderManager()' on a null object reference
我将向listview添加新项目的对话框在MainActivity中,但我需要在Fragment中刷新我的listview,我正在使用ViewPager。
好像我的片段尚未初始化,但现在显示对话框。如何实施这个解决方案?还有一件事,在我的通知中我设置了AutoCancel(true),但是仍然在屏幕上显示。
我无法再添加一张图片(
我的对话活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String text = getIntent().getStringExtra("text");
new AlertDialogWrapper.Builder(this)
.setTitle(R.string.title_alert)
.setMessage(R.string.title_alert)
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(DialogActivity.this, MainActivity.class);
intent.putExtra("notification",true);
intent.putExtra("text",text);
startActivity(intent);
finish();
}
}).show();
}
如果用户在第二个对话框中按下添加项目,我的方法将被校准
private void showTrackerDialog(TrackersFragment f, final String text,boolean isFromNotif) {
final TrackersFragment trackersFragment = f;
tracker = new Tracker();
MaterialDialog dialog = new MaterialDialog.Builder(this)
.title("New tracker :)")
.customView(R.layout.add_track, true)
.positiveText("ADD")
.positiveColorRes(R.color.primary_light_green)
.negativeText(android.R.string.cancel)
.negativeColorRes(R.color.primary_red)
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
if (hours.getValue() == 0 && minutes.getValue() == 0 && isLimit.isCheck()) {
Toast.makeText(getApplicationContext(), "Please check your the input values!", Toast.LENGTH_SHORT).show();
return;
}
//limited
if ((((hours.getValue() != 0 && minutes.getValue() == 0) || (hours.getValue() == 0 && minutes.getValue() != 0))
|| (hours.getValue()!=0 && minutes.getValue()!=0)) && isLimit.isCheck()) {
try {
hoursToMillis = Long.parseLong(String.valueOf(hours.getValue()));
minutesToMillis = Long.parseLong(String.valueOf(minutes.getValue()));
tracker.setLimitTime((hoursToMillis * 60 * 60 * 1000) + (minutesToMillis * 60 * 1000));
tracker.setName(name.getText().toString());
tracker.setElapsedTime((long) 0);
tracker.setIsFinished(false);
tracker.persist(RemindMe.db);
trackersFragment.updateListView(true,tracker);
return;
} catch (Exception ex) {
ex.printStackTrace();
Toast.makeText(getApplicationContext(), "Something goes wrong :(", Toast.LENGTH_SHORT).show();
return;
}
}
//no limit
if (!isLimit.isCheck()) {
tracker.setLimitTime(0L);
tracker.setName(name.getText().toString());
tracker.setElapsedTime((long) 0);
tracker.setIsFinished(false);
tracker.persist(RemindMe.db);
trackersFragment.updateListView(true,tracker);
}
}
@Override
public void onNegative(MaterialDialog dialog) {
}
}).build();
这是NullPointerExeption,getSupportLoaderManager()
public void updateListView(boolean isAdded,Tracker tracker) {
if(isAdded && tracker!=null){
trackerList.add(tracker);
getActivity().getSupportLoaderManager().getLoader(TRACKLOADER_ID).forceLoad();
adapter.swapCursor(Tracker.getAll(db));
}
}
答案 0 :(得分:0)
您的问题不是尝试添加到列表中,而是了解生命周期。在我看来,你没有设置片段,或者可能有你正在使用的片段库的交叉路径。您的错误是v4.Support.Fragment
。确保你到处都使用同一个类。即使打开它。 (检查你的进口。确保它们都是v4)。
同时检查您的MainActivity
是否未展开Activity
,FragmentActivity
之后,如果您尝试通知您的应用,那么您的最佳解决方案将是BroadcastReceiver。