Intentでデータを受け取る&渡す(タスク管理アプリ)
初期画面
タスク追加画面
タスク表示画面
機能
・初期画面: 「タスク追加画面」「タスク表示画面」に遷移
・タスク追加画面: タスクを追加する→OKボタンで「初期画面」にデータを渡して遷移
・タスク表示画面: データを受け取る→タスク表示→BACKボタンで「初期画面」に戻る
ポイント
必要なファイル
activity_main.xml
MainActivity.java
package com.example.orisa.myintent5; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { //部品の変数 Button addBtn, showBtn; //request code private final static int REQUEST_CODE_ADD = 1; //taskのデータを受け取る変数 String task = "empty task"; String date = "empty date"; String time = "empty time"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //部品の取得 addBtn = (Button)findViewById(R.id.addBtn); showBtn = (Button)findViewById(R.id.showBtn); //リスナーの設定 addBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), AddActivity.class); startActivityForResult(intent, REQUEST_CODE_ADD); } }); showBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), ShowActivity.class); //値を格納 intent.putExtra("TASK_SHOW", task); intent.putExtra("DATE_SHOW", date); intent.putExtra("TIME_SHOW", time); //intentの開始 startActivity(intent); } }); } //値を受け取る @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case REQUEST_CODE_ADD: if(resultCode == RESULT_OK){ //値を受け取る task = data.getStringExtra("TASK_ADD"); date = data.getStringExtra("DATE_ADD"); time = data.getStringExtra("TIME_ADD"); }else if (resultCode == RESULT_CANCELED){ //Toastを表示 Toast.makeText(MainActivity.this, "task entry cancelled", Toast.LENGTH_SHORT).show(); } break; default: break; } } }
activity_add.xml
AddActivity.java
package com.example.orisa.myintent5; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class AddActivity extends AppCompatActivity{ //部品の変数 EditText addTask, addDate, addTime; Button okBtn, cancelBtn; //Intent変数 Intent intent = new Intent(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); //部品の取得 addTask = (EditText)findViewById(R.id.addTask); addDate = (EditText)findViewById(R.id.addDate); addTime = (EditText)findViewById(R.id.addTime); okBtn = (Button)findViewById(R.id.okBtn); cancelBtn = (Button)findViewById(R.id.cancelBtn); //リスナーを設定 okBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //値を入れる intent.putExtra("TASK_ADD", addTask.getText().toString()); intent.putExtra("DATE_ADD", addDate.getText().toString()); intent.putExtra("TIME_ADD", addTime.getText().toString()); //Resultを入れる setResult(RESULT_OK, intent); //intentの終了 finish(); } }); cancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Resultを入れる setResult(RESULT_CANCELED, intent); //intentの終了 finish(); } }); } }
activity_show.xml
ShowActivity.java
package com.example.orisa.myintent5; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * Created by orisa on 2017/06/06. */ public class ShowActivity extends AppCompatActivity{ //部品の変数 TextView showTask, showDate, showTime; Button backBtn; //データを入れる変数 String task_show, date_show, time_show; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); //部品の取得 showTask = (TextView)findViewById(R.id.showTask); showDate = (TextView)findViewById(R.id.showDate); showTime = (TextView)findViewById(R.id.showTime); backBtn = (Button)findViewById(R.id.backBtn); //intentを受け取る Intent intent = getIntent(); //intentのデータを受け取る task_show = intent.getStringExtra("TASK_SHOW"); date_show = intent.getStringExtra("DATE_SHOW"); time_show = intent.getStringExtra("TIME_SHOW"); //データを表示 showTask.setText(task_show); showDate.setText(date_show); showTime.setText(time_show); //リスナーの設定 backBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //intentの終了 finish(); } }); } }
Intentでデータを受け取る
機能:
・「ADD」ボタンで画面1→画面2(入力画面)に遷移
・画面2(入力画面)でデータを入力する
・画面1で入力されたデータを表示する
必要なファイル:
activity_main.xml
MainActivity.java
package com.example.orisa.myintent4; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { //部品の変数 Button addBtn; TextView showTask; //定数 private final static int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //部品の取得 addBtn = (Button)findViewById(R.id.addBtn); showTask = (TextView)findViewById(R.id.showTask); //リスナーをつける addBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), SubActivity.class); startActivityForResult(intent, REQUEST_CODE); } }); } //値を受け取る @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case REQUEST_CODE: if(resultCode == RESULT_OK){ String task = data.getStringExtra("TASK_STRING"); String time = data.getStringExtra("TIME_STRING"); String date = data.getStringExtra("DATE_STRING"); //テキストビューに表示 String str = "TASK:\n"+task+"\n\nTIME:\n"+time+"\n\nDATE:\n"+date; showTask.setText(str); }else if (resultCode == RESULT_CANCELED){ Toast.makeText(MainActivity.this, "task creation cancelled", Toast.LENGTH_SHORT); } break; default: break; } } }
activity_sub.xml
SubActivity.java
package com.example.orisa.myintent4; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; public class SubActivity extends AppCompatActivity { //部品の変数 EditText addTask, addTime, addDate; Button okBtn, cancelBtn; //Intent変数 Intent intent = new Intent(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); //部品の取得 addTask = (EditText)findViewById(R.id.addTask); addTime = (EditText)findViewById(R.id.addTime); addDate = (EditText)findViewById(R.id.addDate); okBtn = (Button)findViewById(R.id.okBtn); cancelBtn = (Button)findViewById(R.id.cancelBtn); //okBtnクリック時の処理 okBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //値を格納 intent.putExtra("TASK_STRING", addTask.getText().toString()); intent.putExtra("TIME_STRING", addTime.getText().toString()); intent.putExtra("DATE_STRING", addDate.getText().toString()); //Resultを設定 setResult(RESULT_OK, intent); //Intentの終了 finish(); } }); //cancelBtnクリック時の処理 cancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Resultを設定 setResult(RESULT_CANCELED, intent); //Intentの終了 finish(); } }); } }
AndroidManifest.xml
SubActivityの部分だけ追記
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.orisa.myintent4"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SubActivity" android:label="@string/app_name" /> </application> </manifest>
Calendarアプリ
機能:
・カレンダーを表示
・左右の矢印をクリックすると、月を変えられる
・「月別」ボタンは特に何もしない
注意点:
・Calendar.MONTH は 1月=0, 2月=1, ... ,12月=11 の値を取るので、月をテキストで表示するときは +1 をする
activity_main.xml
Gridlayoutの中にボタンを 6*7 = 42コ 配置する
MainActivity.java
package com.example.orisa.mycalendar1;
import android.icu.util.Calendar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//部品の変数
Button[] btnTable = new Button[43];
Button btnLeft;
Button btnRight;
TextView ymTv;
//カレンダー変数
Calendar cal = Calendar.getInstance();
//現在の日付・曜日を取得
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int dow = cal.get(Calendar.DAY_OF_WEEK);//日=1, 月=2, 火=3, 水=4, 木=5, 金=6, 土=7
int today = day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//部品の取得
btnLeft = (Button)findViewById(R.id.btnLeft);
btnRight = (Button)findViewById(R.id.btnRight);
ymTv = (TextView)findViewById(R.id.ymTv);
//矢印のボタンにリスナーをつける
btnLeft.setOnClickListener(this);
btnRight.setOnClickListener(this);
//配列にボタンを格納
for(int i = 1; i < btnTable.length; i++){
String btnId = "btn"+i;
int resId = getResources().getIdentifier(btnId, "id", getPackageName());
btnTable[i] = (Button)findViewById(resId);
btnTable[i].setOnClickListener(this);
}
//年と月を設定
ymTv.setText(year + " / " + (month+1));
//ボタンに文字を割り当てる
cal.set(year, month, 1);//今月初日に設定
day = cal.get(Calendar.DAY_OF_MONTH);//今月初日の日
dow = cal.get(Calendar.DAY_OF_WEEK);//今月初日の曜日
Toast.makeText(this, String.valueOf(month), Toast.LENGTH_LONG).show();
cal.add(Calendar.MONTH, 1);//来月に設定
cal.add(Calendar.DATE, -1);//来月初日-1 = 今月の末日に設定
int lastdate = cal.get(Calendar.DATE);//今月の末日
for(int i = dow; i<=dow+lastdate-1;i++){
btnTable[i].setText(String.valueOf(day));
//今日の日付の色を変える
if(i == dow+today-1){
btnTable[i].setTextColor(getResources().getColor(R.color.colorPrimaryDark));
}
day++;
}
}
@Override
public void onClick(View v) {
if(v == btnLeft){//月を一つ前にずらす
if(month == 0){
month = 11;
year = year - 1;
}else{
month = month - 1;
}
}
else if (v == btnRight){
if(month == 11){
month = 1;
year = year + 1;
}else{
month = month + 1;
}
}
//年と月を設定
ymTv.setText(year + " / " + (month+1));
//日付を設定
cal.set(year, month, 1);
day = cal.get(Calendar.DAY_OF_MONTH);
dow = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.MONTH,1);
cal.add(Calendar.DATE, - 1);
int lastdate = cal.get(Calendar.DATE);
//日付のテキストをクリアする
for(int i = 1; i < btnTable.length; i++){
btnTable[i].setText(null);
}
//日付のテキストを設定
for(int i = dow; i <= dow+lastdate - 1; i++){
btnTable[i].setText(String.valueOf(day++));
}
}
}
minSDKの変更
Gradle Scripts > build.gradle(Module:app)
minSdkVersion 24
を変更する
リソースIDをループで取得
for(int i = 0; i < btnTable.length; i++){ String btnId = "btn"+(i+1); int resId = getResources().getIdentifier(btnId, "id", getPackageName()); btnTable[i] = (Button)findViewById(resId); btnTable[i].setOnClickListener(this); }
電卓
機能
・電卓アプリ
・整数値の入力
・小数点での結果の出力
activity_main.xml
MainActivity.java
package com.example.orisa.mytablelayout1; import android.content.DialogInterface; import android.content.Intent; import android.support.annotation.StringDef; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity implements View.OnClickListener { //部品の変数 Button btn0; Button btn1; Button btn2; Button btn3; Button btn4; Button btn5; Button btn6; Button btn7; Button btn8; Button btn9; Button divBtn; Button mulBtn; Button minBtn; Button addBtn; Button equalBtn; Button clearBtn; Button[] btnTable = new Button[15]; TextView tv; //その他の変数 String left = "";//演算子の左側 String right = "";//演算子右側 String op;//演算子 boolean opIsClicked = false;//演算子がクリックされてればtrue @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //部品の取得 btn0 = (Button)findViewById(R.id.btn0); btn1 = (Button)findViewById(R.id.btn1); btn2 = (Button)findViewById(R.id.btn2); btn3 = (Button)findViewById(R.id.btn3); btn4 = (Button)findViewById(R.id.btn4); btn5 = (Button)findViewById(R.id.btn5); btn6 = (Button)findViewById(R.id.btn6); btn7 = (Button)findViewById(R.id.btn7); btn8 = (Button)findViewById(R.id.btn8); btn9 = (Button)findViewById(R.id.btn9); divBtn = (Button)findViewById(R.id.divBtn); mulBtn = (Button)findViewById(R.id.mulBtn); minBtn = (Button)findViewById(R.id.minBtn); addBtn = (Button)findViewById(R.id.addBtn); equalBtn = (Button)findViewById(R.id.equalBtn); clearBtn = (Button)findViewById(R.id.clearBtn); tv = (TextView)findViewById(R.id.tv); //配列に格納 btnTable[0] = btn0; btnTable[1] = btn1; btnTable[2] = btn2; btnTable[3] = btn3; btnTable[4] = btn4; btnTable[5] = btn5; btnTable[6] = btn6; btnTable[7] = btn7; btnTable[8] = btn8; btnTable[9] = btn9; btnTable[10] = divBtn; btnTable[11] = mulBtn; btnTable[12] = minBtn; btnTable[13] = addBtn; btnTable[14] = equalBtn; //各ボタンにリスナーをつける for(int i = 0; i < btnTable.length; i++) { btnTable[i].setOnClickListener(this); }; //clearボタンにリスナ0をつける clearBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { left = ""; right = ""; op = ""; opIsClicked = false; tv.setText(null); } }); } @Override public void onClick(View v) { Button b = (Button) v; //ボタンの文字列を取得 String str = b.getText().toString(); //ボタンの文字列を表示 tv.append(" "+str); switch(v.getId()){ case R.id.btn0: case R.id.btn8: case R.id.btn1: case R.id.btn2: case R.id.btn3: case R.id.btn4: case R.id.btn5: case R.id.btn6: case R.id.btn7: case R.id.btn9: if(opIsClicked == false){ left += str; } else{ right += str; } break; case R.id.divBtn: op = "div"; opIsClicked = true; break; case R.id.mulBtn: op = "mul"; opIsClicked = true; break; case R.id.minBtn: op = "min"; opIsClicked = true; break; case R.id.addBtn: op = "add"; opIsClicked = true; break; case R.id. equalBtn: int leftNum = Integer.parseInt(left); int rightNum = Integer.parseInt(right); if(op == "div"){ tv.append(String.valueOf((double)leftNum/rightNum)); }else if(op == "mul"){ tv.append(String.valueOf((double)leftNum * rightNum)); }else if(op == "min"){ tv.append(String.valueOf((double)leftNum - rightNum)); } else if(op == "add"){ tv.append(String.valueOf((double)leftNum + rightNum)); } } } }
参考サイト
qiita.com
SQLiteのデータの追加・表示・検索
機能
・データの追加
・データベースの表示
・データの検索
activity.xml
MainActivity.java
package com.example.orisa.mydb6; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { //部品の変数 EditText addText; Button addBtn; Button showBtn; EditText searchText; Button searchBtn; TextView disp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //部品の取得 addText = (EditText)findViewById(R.id.addText); addBtn = (Button)findViewById(R.id.addBtn); showBtn = (Button)findViewById(R.id.showBtn); searchText = (EditText)findViewById(R.id.searchText); searchBtn = (Button)findViewById(R.id.searchBtn); disp = (TextView) findViewById(R.id.disp); //データベースの生成 MyDbHelper hlp = new MyDbHelper(this); final SQLiteDatabase db = hlp.getWritableDatabase(); //データの追加 addBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ContentValues val = new ContentValues(); val.put("task", addText.getText().toString()); db.insert("tasktb", null, val); } }); //データの検索 searchBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //TextViewのクリア disp.setText("SEARCH RESULTS:\n"); //検索文字列の取得 String str = searchText.getText().toString(); //検索 Cursor c = db.query("tasktb", new String[]{"id", "task"}, "task=?", new String[]{str}, null, null, null); boolean mov = c.moveToFirst(); while(mov){ disp.append(c.getInt(0)+": "+c.getString(1)+"\n"); mov = c.moveToNext(); } c.close(); } }); //データの表示 showBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //TextViewのリセット disp.setText(null); Cursor c = db.query("tasktb", new String[]{"id", "task"}, null, null, null, null, null); boolean mov = c.moveToFirst(); while(mov){ disp.append(c.getInt(0)+": "+c.getString(1)+"\n"); mov = c.moveToNext(); } c.close(); } }); } }
MyDbHelper.java
package com.example.orisa.mydb6; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by orisa on 2017/05/31. */ public class MyDbHelper extends SQLiteOpenHelper { public MyDbHelper(Context context){ super(context, null, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE tasktb(id INTEGER PRIMARY KEY, task TEXT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }