2017-03-14 23 views
0

これは私の問題です。アクティビティを閉じるためにfinish()を呼び出した後、日付を選択するアクティビティを1つ開始しました。次のステップ私は同じ活動を再開し、私は活動がoncreateメソッドを呼び出していないことがわかった。なぜ誰に教えてもらえますか?アクティビティを再開し、アクティビティがoncreateを呼び出さない

ここはマニフェストファイル内のアクティビティおよびスタイルです。ここ

<activity android:name=".activity.CalendarViewActivity" 
     android:theme="@style/calendarview_activity"/> 

<style name="calendarview_activity" parent="Theme.AppCompat.Dialog"> 
    <item name="android:windowBackground">@drawable/calendarview_act_bg</item> 
    <item name="colorAccent">@color/blue_toolbar_title</item> 
    <item name="android:textColor">@color/colorBlack</item> 
    <item name="android:windowShowWallpaper">true</item> 
    <item name="windowNoTitle">true</item> 
</style> 

活動はすでにバックグラウンドで実行されていたので、アクティビティコード

public class CalendarViewActivity extends BaseActivity 
     implements View.OnClickListener, OnDateSelectedListener, OnMonthChangedListener { 
    private MaterialCalendarView mMaterialCV; 
    DatabaseReference mTimesheetDailyStatusRef; 
    private CalendarDay mMonthDate; 
    private TextView tvYear; 
    private TextView tvDay; 
    private static final int SUBMITTED = 2; 
    private static final int UN_SUBMITTED = 1; 
    private static final int RESULT_CODE = 200; 
    private ValueEventListener mStatusListener; 
    private DatabaseReference statusRootRef; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_calendarview_activity); 
     initView(); 
     initData(); 
    } 

    private void initData() { 
     statusRootRef = FirebaseDatabase.getInstance().getReference().child(Constants 
       .COLLECTION_ENGINEER_ROOT).child(Constants.COLLECTION_TIMESHEETS_STATUS).child 
       (getUid()); 
     mTimesheetDailyStatusRef = statusRootRef 
       .child(String.valueOf(Calendar.getInstance().get(Calendar.YEAR))) 
       .child(String.valueOf(Calendar.getInstance().get(Calendar.MONTH))); 
     CalendarDay calendarDay = CalendarDay.from(Calendar.getInstance()); 
     setStatus(calendarDay); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 

    private void initView() { 
     setSize(); 
     mMaterialCV = (MaterialCalendarView) findViewById(R.id.calendarview_timesheet); 
     mMaterialCV.setWeekDayTextAppearance(getResColor(R.color.colorBlack)); 
     mMaterialCV.setHeaderTextAppearance(getResColor(R.color.colorBlack)); 
     mMaterialCV.setOnDateChangedListener(this); 
     mMaterialCV.setOnMonthChangedListener(this); 
     mMaterialCV.setCurrentDate(Calendar.getInstance()); 
     Intent intent = getIntent(); 
     mMonthDate = intent.getParcelableExtra(Constants.KEY_SELECTED_DATE); 
     if (mMonthDate != null) { 
      mMaterialCV.setSelectedDate(mMonthDate); 
      mMaterialCV.setCurrentDate(mMonthDate); 
     } else { 
      setCurrentDate(); 
     } 
     tvDay = (TextView) findViewById(R.id.calendarview_day); 
     tvYear = (TextView) findViewById(R.id.calendarview_year); 
     setSelectDataToTop(mMonthDate); 
     TextView tvOK = (TextView) findViewById(R.id.choose_day_ok); 
     TextView tvCancel = (TextView) findViewById(R.id.choose_day_cancel); 
     tvCancel.setTypeface(fontMedium); 
     tvOK.setTypeface(fontMedium); 
     tvCancel.setOnClickListener(this); 
     tvOK.setOnClickListener(this); 
    } 

    private void setCurrentDate() { 
     Calendar c = Calendar.getInstance(); 
     mMonthDate = CalendarDay.from(c); 
    } 

    private void setSize() { 
     WindowManager m = getWindowManager(); 
     Display d = m.getDefaultDisplay(); 
     WindowManager.LayoutParams p = getWindow().getAttributes(); 
     p.height = (int) (d.getHeight() * 0.85); 
     p.width = (int) (d.getWidth() * 0.9); 
     p.alpha = 1.0f; 
     p.dimAmount = 0.0f; 
     getWindow().setAttributes(p); 
     getWindow().setGravity(Gravity.TOP); 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.choose_day_cancel: 
       finish(); 
       break; 
      case R.id.choose_day_ok: 
       Intent backIntent = new Intent(); 
       backIntent.putExtra(Constants.KEY_SELECTED_DATE, mMonthDate); 
       setResult(RESULT_CODE, backIntent); 
       finish(); 
       break; 
      default: 
       break; 
     } 
    } 

    private void setSelectDataToTop(CalendarDay mMonthDate) { 
     tvYear.setText(String.valueOf(mMonthDate.getYear())); 
     int dayOfWeek = mMonthDate.getCalendar().get(Calendar.DAY_OF_WEEK); 
     String monthAndDay = TimeFormatUtil.getDate(mMonthDate.getCalendar().getTimeInMillis()); 
     tvDay.setText(TimeFormatUtil.getWeekSimple(dayOfWeek) + ", " + monthAndDay); 
    } 

    @Override 
    public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, 
           boolean selected) { 
     mMonthDate = date; 
     setSelectDataToTop(date); 
     mMaterialCV.invalidateDecorators(); 
    } 

    @Override 
    public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) { 
     mTimesheetDailyStatusRef.removeEventListener(mStatusListener); 
     mTimesheetDailyStatusRef = null; 
     mStatusListener = null; 
     mMonthDate = date; 
     setStatus(mMonthDate); 
    } 

    private void setStatus(final CalendarDay calendarDay) { 
     mTimesheetDailyStatusRef = statusRootRef.child(String.valueOf(calendarDay.getYear())).child 
       (String.valueOf(calendarDay.getMonth())); 
     mStatusListener = new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       ArrayList<CalendarStatusDay> days = new ArrayList<>(); 
       for (DataSnapshot child : dataSnapshot.getChildren()) { 
        CalendarStatusDay day = child.getValue(CalendarStatusDay.class); 
        days.add(day); 
       } 
       if (isFinishing()) { 
        return; 
       } 
       Calendar calendar = Calendar.getInstance(); 
       ArrayList<CalendarDay> unSubmittedDays = new ArrayList<>(); 
       unSubmittedDays.clear(); 
       ArrayList<CalendarDay> submittedDays = new ArrayList<>(); 
       submittedDays.clear(); 
       for (CalendarStatusDay day : days) { 
        if (day.getStatus() == SUBMITTED) { 
         calendar.set(calendarDay.getYear(), calendarDay.getMonth(), 
           day.getDayOfmonth()); 
         submittedDays.add(CalendarDay.from(calendar)); 
        } else if (day.getStatus() == UN_SUBMITTED) { 
         calendar.set(calendarDay.getYear(), calendarDay.getMonth(), 
           day.getDayOfmonth()); 
         unSubmittedDays.add(CalendarDay.from(calendar)); 
        } 
       } 
       mMaterialCV.addDecorators(
         new EventDecorator(getDrawable(R.drawable.submitted_selector), 
           submittedDays)); 
       mMaterialCV.addDecorator(
         new EventDecorator(getDrawable(R.drawable.unsubmitted_selector), 
           unSubmittedDays)); 
       mMaterialCV.addDecorators(); 
       unSubmittedDays.clear(); 
       unSubmittedDays = null; 
       submittedDays.clear(); 
       submittedDays = null; 
       days.clear(); 
       days = null; 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }; 
     mTimesheetDailyStatusRef.addValueEventListener(mStatusListener); 
    } 

} 
+0

のonCreate(メッセージフォーム他のアクティビティを取得するために)あなたのケースの次には、それは資源の不足のために破壊されますしない限り、活動が作成された初回のみ呼び出されます完了したアクティビティに行く時間onResume() – HaroldSer

答えて

0

、同じ活動の新しいインスタンスを開くlaunchModeパラメータを探して、マニフェストを参照してくださいにアクティビティタグに追加したい場合のonActivityResultメソッドをオーバーライドしてください。setResultのようなコードコントロールは、前のActvityonActivityResultメソッドに行きます。

Intent backIntent = new Intent(); 
backIntent.putExtra(Constants.KEY_SELECTED_DATE, mMonthDate); 
setResult(RESULT_CODE, backIntent); 
finish(); 

コールバックメソッド

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
     super.onActivityResult(requestCode, resultCode, data); 
    // check if the request code is same as what is passed here it is 2 
     if(requestCode==2) 
     { 
     String selcted_date=data.getStringExtra(Constants.KEY_SELECTED_DATE); 
     textView1.setText(message); 
     } 
    } 
+0

もちろん私があなたが言及した方法を上書きする、私はそれが理由だとは思わない。 –

+0

@ので、AndoridManifest.xmlファイルにlounchModeを使用しました。 –

+0

申し訳ありませんが、私のアプリのクラッシュの原因となるコールバックメソッドの後にoncreateメソッドが呼び出されたことが分かりました。 :) –

0

です。アクションコールバックを取得する場合は、startActivityForResultメソッドを使用して、コールアクティビティのonActivityResultでコールバックを取得することができます。

、あなたが本当にあなたは、あなたが必要とする選択した日付を取得するためにstartActivityForResultを使用している場合this

+0

アクティビティはバックグラウンドでどのように実行されますか?私はfinish()を呼び出しました。それを完全に破壊する方法はありますか? –

関連する問題