2016-03-29 3 views
-1

Я - новый разработчик, и я хочу добавить time picker в мой код. Я следовал тому же учебнику, но когда я использую эмулятор, он не работает. Даже genymotion говорит мне, что в выполнении моего приложения есть проблема (и в моем коде нет ошибки) ошибка началась, когда я положил showTimePickerDialog() в onCreate(). Это мой код:Time picker android

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 
    Button button_stpd; 
    static final int DIALOG_ID = 0 ; 
    int hour_x; 
    int minute_x ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     showTimePickerDialog(); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
      toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.Acceuil, new Acceuil()).commit(); 

      showTimePickerDialog(); 
    } 

    public void showTimePickerDialog(){ 
     button_stpd = (Button)findViewById(R.id.temps_btn); 
     button_stpd.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         showDialog(DIALOG_ID); 
        } 
       } 
     ); 

    } 

    @Override 
    protected Dialog onCreateDialog (int id){ 
     if (id == DIALOG_ID) 
      return new TimePickerDialog(MainActivity.this, kTimePickerListner,hour_x,minute_x,false); 
     return null; 
    } 

    protected TimePickerDialog.OnTimeSetListener kTimePickerListner = 
      new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
        hour_x = hourOfDay; 
        minute_x = minute; 
        Toast.makeText(MainActivity.this,hour_x + ":"+minute_x, Toast.LENGTH_SHORT).show(); 
       } 
      }; 


    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     FragmentManager fragmentManager = getFragmentManager() ; 



     if (id == R.id.nav_Acceuil) { 
      fragmentManager.beginTransaction().replace(R.id.Acceuil, new Acceuil()).commit() ; 
      // Handle the camera action 
     } else if (id == R.id.nav_Messagerie) { 
      fragmentManager.beginTransaction().replace(R.id.Acceuil, new Messagerie()).commit() ; 


     } else if (id == R.id.nav_Notification){ 
      fragmentManager.beginTransaction().replace(R.id.Acceuil, new Notification()).commit() ; 


     } else if (id == R.id.nav_Paramétres) { 
      fragmentManager.beginTransaction().replace(R.id.Acceuil, new Parametre()).commit() ; 

     } 
     else if (id == R.id.nav_Calories) { 
      fragmentManager.beginTransaction().replace(R.id.Acceuil, new Calcule()).commit() ; 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

} 
+0

В чем именно проблема? –

+0

1. Какова ошибка. Говорит ли logcat что-то. Если нет, что именно происходит? 2. Пожалуйста, открепите свой код :) 3. Почему у вас есть 2 раза этот showTimePickerDialog()? –

+0

Вне темы: showDialog/onCreateDialog/onPrepareDialog устарел много лет. Так как Android 3 и фрагменты - в данном случае DialogFragment - вышли точно. –

ответ

0
button_stpd = (Button)findViewById(R.id.temps_btn); 
    button_stpd.setOnClickListener(... 

Этот код связывает кнопку вы имеете в Java коде на кнопку, в макете XML. Такой код должен быть написан только один раз и поскольку он является частью вашего метода showTimePickerDialog() , который вы используете дважды, это большая проблема.

Если вы хотите сделать инициализацию другим способом, чтобы onCreate выглядел чистым, это нормально, но используйте этот метод только один раз. Это можно было бы назвать initiateViews(), например, и вы могли бы делать такие вещи в нем, как:

button_stpd = (Button)findViewById(R.id.temps_btn); 
button_stpd.setOnClickListener(... 
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

Однако, от того, что я понимаю, второй раз, когда вы используете showTimePickerDialog(), что вы действительно хотели было showDialog(DIALOG_ID);