2013-12-19 4 views
2

Я занимаюсь разработкой и использованием Android Studio. У меня есть экран, который использует календарь для получения даты от ввода пользователей. Проблема, как только я добавил код к этому, моя кнопка для перехода на другой экран перестала работать. Я потратил несколько часов на это и не могу найти, где я ошибаюсь. Я подозреваю, что это делать с порядком моего кода, но он борется здесь.Переход на другой экран не работает

здесь код из класса Java

//class starts here 
    package com.MSL.claimssolutions1; 

    import android.app.Activity; 
    import android.app.DatePickerDialog; 
    import android.app.Dialog; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.DatePicker; 
    import android.widget.EditText; 
    import android.widget.TextView; 

    import java.util.Calendar; 


    public class accident_details_activity extends Activity 
    { 
     //set variables 
     private int mYear; 
     private int mMonth; 
     private int mDay; 

     private TextView mDateDisplay; 
     private Button mPickDate; 

     static final int DATE_DIALOG_ID = 0; 
     accident_details_activity ob; 
     public void onCreate(Bundle icicle) 
     { 
      //listen for click from button to move to next screen 

// this is where I think my code is going wrong - I think should be moved elsewhere, not sure though 
      super.onCreate(icicle); 
      setContentView(R.layout.accident_details_activity); 
      Button StepFive = (Button) findViewById(R.id.StepFive_button); 
      StepFive.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
      //move to next screen - i.e. upload files 
       Intent i = new Intent(accident_details_activity.this, upload_file_activity.class); 
       startActivity(i); 
      } 

      }); 

     //add calendar functionality 

      //@Override 
      super.onCreate(icicle); 
      setContentView(R.layout.accident_details_activity); 

      mDateDisplay = (EditText) findViewById(R.id.AccidentDate); 
      mPickDate = (Button) findViewById(R.id.myDatePickerButton); 

      mPickDate.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        showDialog(DATE_DIALOG_ID); 
       } 
      }); 

      // get the current date 
      final Calendar c = Calendar.getInstance(); 
      mYear = c.get(Calendar.YEAR); 
      mMonth = c.get(Calendar.MONTH); 
      mDay = c.get(Calendar.DAY_OF_MONTH); 

      // display the current date 
      updateDisplay(); 
     } 
     public void setOb(accident_details_activity obA){ 
      this.ob=obA; 
     } 
    //update text field with date selected from calendar 
     private void updateDisplay() { 
      this.mDateDisplay.setText(
        new StringBuilder() 
          // Month is 0 based so add 1 
          .append(mDay).append("-") 
          .append(mMonth + 1).append("-") 
          .append(mYear).append(" ")); 
     } 
     private DatePickerDialog.OnDateSetListener mDateSetListener = 
       new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, 
              int monthOfYear, int dayOfMonth) { 
         mYear = year; 
         mMonth = monthOfYear; 
         mDay = dayOfMonth; 
         updateDisplay(); 
        } 
       }; 
     @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
       case DATE_DIALOG_ID: 
        return new DatePickerDialog(this, 
          mDateSetListener, 
          mYear, mMonth, mDay); 
      } 
      return null; 
     } 

    } 
+1

Почему вы называете 'setContentView' дважды? не делайте этого. – njzk2

+0

Блестяще, благодаря тому, что setContentView, перечисленный дважды, является именно тем, что с ним не так. Я думал, что это будет более сложная причина. - Еще раз спасибо, но снова сообщество stackoverflow на помощь :-) – user2029541

ответ

2

Вы звоните setContentView(), а затем, глядя на вид кликать, заходящего слушателя, а затем вы звоните setContentView снова(). Это уничтожит только что настроенное представление. Не упоминайте, что ссылка на кнопку StepFive больше не будет в одной иерархии.

Только вызовите setContentView один раз, а затем привяжите переменные и слушатели после.