2017-06-14 10 views
0

私はAndroid Studioを使用しています。私のアプリケーションには2ページあります。 1つは、ユーザが検索するために情報を入力しなければならない検索ページである。 EditTextの1つに日付と時刻が必要で、それを入力するのではなく、EditTextをクリックすると、ユーザーは2番目のページにリダイレクトされ、CalendarViewとTime Pickerから日付と時刻が選択されます。 「完了」ボタンをクリックすると、前述のEditTextに日付と時刻が入力されます。ページへのリダイレクトに関する問題がある

問題がありますか?それが起こったときにアプリクラッシュ、コードで私を助けてください。ここで

は、最初のページのコードです:

public class SearchActivity extends AppCompatActivity { 
EditText etPickUp, etDropOff, etRentS, etRentE; 
Button btnBack, btnSearch; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_search); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    etPickUp = (EditText) findViewById(R.id.etPickUp); 
    etDropOff = (EditText) findViewById(R.id.etDropOff); 

    etRentS = (EditText) findViewById(R.id.etRentS); 
    etRentS.setFocusable(false); 
    etRentS.setClickable(true); 
    etRentS.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      Intent rentS = new Intent(SearchActivity.this, RentStartActivity.class); 
      startActivity(rentS); 
     } 
    }); 

    btnBack = (Button) findViewById(R.id.btnBack); 
    btnBack.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      Intent back = new Intent(SearchActivity.this, LandingActivity.class); 
      startActivity(back); 
     } 
    }); 

    String date1=""; 
    String time1=""; 
    Bundle bundle1 = getIntent().getExtras(); 
    if(bundle1 != null) 
    { 
     date1 = bundle1.getString("Date1"); 
     time1 = bundle1.getString("Time1"); 
    } 
    etRentS.setText(date1); 
    etRentS.setText(time1); 


    btnSearch = (Button) findViewById(R.id.btnSearch); 
    btnSearch.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 

     } 
    }); 

    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(); 
     } 
    }); 
} 

そしてここでは、2ページのコードです:

public class RentStartActivity extends AppCompatActivity { 

Button btnDone1, btnCancel1; 
CalendarView calendar1; 
TimePicker time1; 

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

    calendar1 = (CalendarView) findViewById(R.id.calendar1); 
    time1 = (TimePicker) findViewById(R.id.time1); 

    btnDone1 = (Button) findViewById(R.id.btnDone1); 
    btnDone1.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      Intent done1 = new Intent(); 
      done1.putExtra("Date1", calendar1.getDate()); 
      done1.putExtra("Time1", time1.getDrawingTime()); 
      startActivity(done1); 
     } 
    }); 

    btnCancel1 = (Button) findViewById(R.id.btnCancel1); 
    btnCancel1.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      Intent cancel1 = new Intent(RentStartActivity.this, SearchActivity.class); 
      startActivity(cancel1); 
     } 
    }); 

    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(); 
     } 
    }); 
} 

ありがとうございました!!

+0

アプリがクラッシュすると、スタックトレースがデバイスコンソールのログに出力されるはずです - それを見つけてここに貼り付けることはできますか? –

答えて

0

インテントオブジェクトを定義する際に、どのアクティビティを開始するか忘れています。

  Intent done1 = new Intent(); 
      done1.putExtra("Date1", calendar1.getDate()); 
      done1.putExtra("Time1", time1.getDrawingTime()); 
      startActivity(done1); 

あなたは活動結果を使用したい、この

Intent done1=new Intent(SearchActivity.this, RentStartActivity.class); 
0

のようなものを追加する必要があります。あなたは最初にこのコードを使用して第2のアクティビティを開く必要があります:

RentStartActivityResultCodeが結果を識別するために使用される定数intで
startActivityForResult(RentStartActivity, RentStartActivityResultCode) 

。第二の活動で

、結果を返送するために行われ、ボタンのアクションハンドラにこのコードを使用:

Intent output = new Intent(); 
output.putExtra("Date1", calendar1.getDate().getTime()); 
output.putExtra("Hour", time1.getHour()); 
output.putExtra("Minute", time1.getMinute()); 
setResult(RESULT_OK, output); 
finish(); 

そして最後に、最初のアクティビティで結果を読み取るために、このコードを使用します。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == RentStartActivityResultCode && resultCode == RESULT_OK && data != null) { 
     Date date1 = new Date(data.getLongExtra("Date1")); 
     int hour = data.getIntExtra("Hour"); 
     int minute = data.getIntExtra("Minute"); 
    } 
} 
関連する問題