выбор календарной даты для начала новой деятельности

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

public class Main extends Activity {
    CalendarView cal;
    String d,m,y;

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

        LinearLayout llAppointment, llAdmitPatient, llAdmitDischarge, lle_counsults, llSecondOpinion, llQandA;
        cal = (CalendarView) findViewById(R.id.calndrView);
        llAppointment = (LinearLayout) findViewById(R.id.LLAppointment);
        llAdmitPatient = (LinearLayout) findViewById(R.id.LLAdmitPatient);
        llAdmitDischarge = (LinearLayout) findViewById(R.id.LLAdmitDischarge);
        lle_counsults = (LinearLayout) findViewById(R.id.LLE_consults);
        llSecondOpinion=(LinearLayout) findViewById(R.id.LLSecondOpinions);
        llQandA = (LinearLayout) findViewById(R.id.LLQandA);


        //appointments 
        llAppointment.setOnClickListener(new OnClickListener() {

            @SuppressLint("SimpleDateFormat")
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Calendar c = Calendar.getInstance();
                SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
                String Date = df.format(c.getTime());


                 String day=Date.substring(0,2);
                 String month=Date.substring(3,5);
                 String year=Date.substring(8,10);

            d=day;m=month;y=year;

                Intent intent = new Intent(Main.this, AllPatientsActivity.class);
                intent.putExtra("day", day);
                intent.putExtra("month", month);
                intent.putExtra("year", year);

                startActivity(intent);


            }
        });

        // Admitted patients

        llAdmitPatient.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent= new Intent(Main.this, AdmittedPatients.class);
                startActivity(intent);
            }
        });
        // Admit-Discharge
        llAdmitDischarge.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Main.this, AdmitDischarge.class);
                startActivity(intent);
            }
        });
        //E-consultant
        lle_counsults.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Main.this, EConsultant.class);
                startActivity(intent);
            }
        });
        //Second Opinion
        llSecondOpinion.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Main.this, SecondOpinion.class);
                startActivity(intent);
            }
        });
        //Question and answer
        llQandA.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Main.this, QAndA.class);
                startActivity(intent);
            }
        });

        cal.setOnDateChangeListener(new OnDateChangeListener() {

            @Override
            public void onSelectedDayChange(CalendarView view, int year,
                    int month, int day) {
                // TODO Auto-generated method stub
                Toast.makeText(getBaseContext(),
                        day + "/" + month + "/" + year, Toast.LENGTH_SHORT)
                        .show();



                if(Integer.parseInt(d)==day && Integer.parseInt(m)==month && Integer.parseInt(y)==year){
                    Toast.makeText(Main.this, "day:"+day+"d"+d+"month:"+month+"m"+m+"year:"+year+"y"+y, Toast.LENGTH_LONG).show();
                }


                Intent intent = new Intent(Main.this, AllPatientsActivity.class);
                intent.putExtra("day", day);
                intent.putExtra("month", month);
                intent.putExtra("year", year);
                startActivity(intent);
            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_actions, menu);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
        case R.id.action_calendar:
            Toast.makeText(this, "Menu Item 1 selected", Toast.LENGTH_SHORT)
                    .show();
            cal.setVisibility(View.VISIBLE);

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

Когда я нажимаю кнопку панели действий, он должен запускать calendarView, и если я выбрал дату в этом представлении календаря, он должен запустить второе действие, показывающее эту дату. но проблема в том, что этот код не позволяет mi выбирать дату, отличную от этого месяца, потому что, как только этот месяц изменяется при прокрутке, запускается событие. какие изменения мне следует сделать в коде, чтобы моя новая активность запускалась с правильной датой


person Hrishikesh Waghmare    schedule 07.10.2015    source источник
comment
вы хотите начать новое действие, когда вы нажимаете кнопку на панели действий?   -  person Fakher    schedule 07.10.2015
comment
нет нет Когда я нажимаю кнопку панели действий, он должен запускать calendarView, и если я выбрал дату в этом представлении календаря, он должен запустить второе действие, показывающее эту дату. но проблема в том, что этот код не позволяет mi выбирать дату, отличную от этого месяца, потому что, как только этот месяц изменяется при прокрутке, запускается событие.   -  person Hrishikesh Waghmare    schedule 07.10.2015
comment
выдает ли какую-либо ошибку, когда вы выбираете дату, отличную от этого месяца   -  person karan    schedule 07.10.2015
comment
без ошибок запускается активность AllPatientsActivity, и мы потеряли возможность выбрать дату.   -  person Hrishikesh Waghmare    schedule 07.10.2015


Ответы (1)


Вы можете использовать Intent.putExtra(String date) для передачи даты из одного действия в другое.

В основном действии

//Create new Intent Object, and specify class
Intent intent = new Intent();

intent.setClass(Main.this,AllPatientsActivity.class);

intent.putExtra("passdate","Date_var_here");  

Main.this.startActivity(intent);

В действии AllPatientsActivity

//obtain  Intent Object send  from SenderActivity
  Intent intent = this.getIntent();

  /* Obtain String from Intent  */
  if(intent !=null)
  {
     String strdata = intent.getExtras().getString("passdate");
    // DO SOMETHING HERE
  }
  else
  {
    // DO SOMETHING HERE
  }
person prat    schedule 07.10.2015
comment
работает. но я все еще не могу прокрутить календарь. Как только месяц меняется, запускается событие. не позволяя мне выбирать дату каких-либо других месяцев. - person Hrishikesh Waghmare; 07.10.2015
comment
вы можете проверить это ‹stackoverflow.com/questions/12641250/ ›для проблемы с прокруткой. - person prat; 07.10.2015