Link
状態:-
閲覧数:875
投稿日:2018-05-09
更新日:2018-05-09
P58 明示的なインテント / MultiActivity
アプリ起動したら最初に表示されるアクティビティ
「<intent-filter>要素に指定されているアクティビティ」が「起動時に表示されるアクティビティ」となる
▼\app\src\main\AndroidManifest.xml
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
multiactivity
最初の画面(FirstActivity)のボタンが押されたら、次の画面(SecondActivity)へ遷移する
・ボタンが押された時に実行するメソッドを記述したイベントリスナーOnClickListenerを作成
イベントリスナー
・イベントハンドラメソッドを実行して、イベントに応じた処理を実行
明示的なIntentオブジェクトを作成
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
画面遷移
・下記メソッドで画面を遷移
startActivity(intent);
▼FirstActivity.java
package com.example.kanehiro.multiactivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btnNext = (Button) this.findViewById(R.id.button1);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
▼SecondActivity.java
package com.example.kanehiro.multiactivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
P67 ツータッチ楽々メール / TwoTouchMail
明示的なIntentオブジェクトを作成
迎えに来て
Intent intent = new Intent(MainActivity.this, PickUpActivity.class);
ご飯いらない
Intent intent = new Intent(MainActivity.this, NoDinnerActivity.class);
コード
▼/twotouchmail/MainActivity.java
package com.example.kanehiro.twotouchmail;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//「迎えに来て」ボタン
Button btnPickUp = (Button) this.findViewById(R.id.button1);
btnPickUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =
new Intent(MainActivity.this, PickUpActivity.class);
startActivity(intent);
}
});
//「ご飯いらない」ボタン
Button btnNoDinner = (Button) this.findViewById(R.id.button2);
btnNoDinner.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =
new Intent(MainActivity.this, NoDinnerActivity.class);
startActivity(intent);
}
});
}
}
「迎えに来て」メール送信
▼/twotouchmail/PickUpActivity.java
package com.example.kanehiro.twotouchmail;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class PickUpActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_up);
Button btnSend = (Button) this.findViewById(R.id.button);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioGroup rgPlace = (RadioGroup) findViewById(R.id.rg_place);
int checkedId = rgPlace.getCheckedRadioButtonId();
String strPlace = ((RadioButton) findViewById(checkedId)).getText().toString();
Log.d("place:", strPlace);
EditText edit01 = (EditText) findViewById(R.id.editText);
String title = edit01.getText().toString();
Resources res = getResources();
Uri uri = Uri.parse("mailto:" + res.getString(R.string.mail_to).toString());
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, strPlace + "に迎えにきて");
startActivity(intent);
}
});
}
}
「ご飯いらない」メール送信
▼/twotouchmail/NoDinnerActivity.java
package com.example.kanehiro.twotouchmail;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class NoDinnerActivity extends AppCompatActivity
implements View.OnClickListener,View.OnLongClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_no_dinner);
Button btnSend = (Button) this.findViewById(R.id.button);
btnSend.setOnClickListener(this);
btnSend.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
EditText edit01 = (EditText)findViewById(R.id.editText);
String title = edit01.getText().toString();
Resources res = getResources();
Uri uri = Uri.parse("mailto:" + res.getString(R.string.mail_to).toString());
Intent intent=new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, "遅くなるのでめしいらない");
startActivity(intent);
}
@Override
public boolean onLongClick(View v) {
EditText edit01 = (EditText)findViewById(R.id.editText);
String title = edit01.getText().toString();
Resources res = getResources();
Uri uri = Uri.parse("mailto:" + res.getString(R.string.mail_to).toString());
Intent intent=new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, "遅くなるので食事いりません。" +
" 連絡が遅くなってごめんなさい。" +
"いつもありがとう");
startActivity(intent);
return true;
}
}
P83 魅惑のあんばやしルーレット
エラー対応
Cannot resolve symbol 'AppCompatActivity'
同じパッケージに属しているクラス
import宣言しなくても単純名でアクセスできる
▼MainActivity.java
ArrayList<AnbayasiData> anbayasi = new ArrayList<AnbayasiData>();
・new ジェネリクス 具体例AnbayasiDataクラス
アクセサメソッドのgetterメソッドのみで実装されたクラス
・セットした値を変更する必要はないため、setterメソッドを実装していない
AnbayasiDataクラス(ユーザ定義JAVAクラス)をインスタンス化したオブジェクトが、1つのCardViewに対応している
・RecyclerView と ScrollView について
・CardViewについて
AnbayasiDataクラスのフィールド(メンバ変数)
number
・あんばやしの本数
addition
・おまけの本数
comment
・「残念」「まあまあ」「あたり」といった文字列
public class AnbayasiData {
private int number;
private int addition;
private String comment;
private int number;
private int addition;
private String comment;
MyDataクラス
このクラスにはデータ配列を用意
・この配列の値をAnbayasiDataクラスに与えて、オブジェクトを生成
RecyclerViewクラス
0.レイアウト用XMLファイルで、個々のビューにIDを設定
▼res\layout\activity_main.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/cardList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_toRightOf="@id/imageView"/>
android:id="@+id/cardList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_toRightOf="@id/imageView"/>
1.RecyclerViewオブジェクトを取得
・「R.id.cardList」は、「▼\res\layout\activity_main.xmlファイル」内に記載している「android:id="@+id/cardList"」
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.cardList);
2.LinearLayoutManagerを生成
・RecyclerViewにはレイアウトを決めるレイアウトマネージャー(LayoutManager)が必要なので、LinearLayoutManagerを生成
LinearLayoutManager llManager = new LinearLayoutManager(this);
コード
▼com/example/kanehiro/anbayasiroulette/MainActivity.java
package com.example.kanehiro.anbayasiroulette;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.cardList); //RecyclerViewオブジェクトを取得
// コンテンツの変化でRecyclerViewのサイズが変わらない場合は、
// この設定でパフォーマンスを向上させることができる
recyclerView.setHasFixedSize(true);
// RecyclerViewにはレイアウトを決めるレイアウトマネージャー(LayoutManager)が必要なので、LinearLayoutManagerを生成している
LinearLayoutManager llManager = new LinearLayoutManager(this);
// 横スクロールになる
// llManager.setOrientation(LinearLayoutManager.HORIZONTAL); //スクロールする方向を決定。LinearLayoutManager.HORIZONTALなので横方向にスクロール
// 縦スクロール
llManager.setOrientation(LinearLayoutManager.VERTICAL); //スクロールする方向を決定。LinearLayoutManager.VERTICALなので縦方向にスクロール
recyclerView.setLayoutManager(llManager); //RecyclerViewにLinearLayoutManagerをセットする
ArrayList<AnbayasiData> anbayasi = new ArrayList<AnbayasiData>(); //表示するAnbayasiDataクラスのArrayListを作成
for (int i = 0; i < MyData.commentArray.length; i++) {
anbayasi.add(new AnbayasiData( //MyDataクラスの配列の値を与えてAnbayasiDataオブジェクトを生成してリストに追加する
MyData.numberArray[i],
MyData.additionArray[i],
MyData.commentArray[i]
));
}
RecyclerView.Adapter adapter = new AnbayasiAdapter(anbayasi); //作成したanbayasiリストをAnbayasiAdapterに渡して、adapterを生成する
recyclerView.setAdapter(adapter); //生成したadapterを、recyclerViewオブジェクトのAdapterにセットする
recyclerView.smoothScrollToPosition(anbayasi.size() - 1); //RecyclerViewに表示されたカードを一番最後まで、ぐるっとスクロール
}
}
▼com/example/kanehiro/anbayasiroulette/AnbayasiAdapter.java
package com.example.kanehiro.anbayasiroulette;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import java.util.ArrayList;
/**
* Created by kane on 2015/12/03.
*/
public class AnbayasiAdapter extends RecyclerView.Adapter<AnbayasiViewHolder> {
private ArrayList<AnbayasiData> rouletteDataSet;
public AnbayasiAdapter(ArrayList<AnbayasiData> roulette) {
this.rouletteDataSet = roulette;
}
// 新しいViewを作成する
// レイアウトマネージャーにより起動される
@Override
public AnbayasiViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// parentはRecyclerView
// public View inflate (int resource, ViewGroup root, boolean attachToRoot)
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cards_layout, parent, false);
// Log.d("Anbayasi", parent.toString());
//AnbayasiViewHolder anbayasiViewHolder = new AnbayasiViewHolder(view);
return new AnbayasiViewHolder(view);
}
// Viewの内容を交換する(リサイクルだから)
// レイアウトマネージャーにより起動される
@Override
public void onBindViewHolder(final AnbayasiViewHolder holder, final int listPosition) {
holder.textViewNumber.setText(rouletteDataSet.get(listPosition).getNumber()+ "本");
holder.textViewComment.setText(rouletteDataSet.get(listPosition).getComment());
holder.base.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// vはCardView
Toast.makeText(v.getContext(),"おまけ" +
rouletteDataSet.get(listPosition).getAddition()+ "本",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return rouletteDataSet.size();
}
}
▼com/example/kanehiro/anbayasiroulette/AnbayasiData.java
package com.example.kanehiro.anbayasiroulette;
/**
* Created by kane on 2015/12/03.
*/
public class AnbayasiData {
private int number;
private int addition;
private String comment;
// Constructor
public AnbayasiData(int number, int addition, String comment) {
this.number = number;
this.addition = addition;
this.comment = comment;
}
public int getNumber() {
return number;
}
public int getAddition() {
return addition;
}
public String getComment() {
return comment;
}
}
▼L:\Android\copysamplecode\makeitunderstand\Ch03\AnbayasiRoulette\app\src\main\java\com\example\kanehiro\anbayasiroulette\MyData.java
package com.example.kanehiro.anbayasiroulette;
/**
* Created by kane on 2015/12/03.
*/
public class MyData {
static String[] commentArray =
{"残念!", "まあまあ", "残念!", "あたり", "残念!","大当り", "まあまあ", "残念!", "あたり", "まあまあ",
"残念!", "あたり", "残念!", "あたり", "残念!","大当り", "まあまあ", "大当り", "あたり", "まあまあ",
"残念!", "あたり", "残念!", "あたり", "残念!","大当り", "まあまあ", "あたり", "残念!", "まあまあ"};
static Integer[] numberArray =
{5, 8, 5, 10, 5, 14, 9, 5, 10, 8,
5, 10, 4, 12, 5, 20, 8, 15, 12, 8,
4, 10, 5, 10, 5, 15, 7, 14, 5, 8};
static Integer[] additionArray =
{3, 2, 3, 1, 4, 1, 1, 5, 2, 2,
3, 1, 4, 2, 3, 0, 2, 0, 2, 2,
4, 2, 3, 1, 3, 0, 3, 1, 5, 2};
}
▼layout/cards_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="200dp"
card_view:cardBackgroundColor="@color/lime_400"
card_view:cardCornerRadius="10dp"
card_view:cardElevation="5dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="20dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本"
android:layout_marginLeft="10dp"
android:layout_marginTop="60dp"
android:textSize="36sp"/>
<TextView
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="あたり"
android:textSize="36dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/number"
android:layout_alignBaseline="@id/number"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
レイアウト用XMLファイルで、個々のビューにIDを設定している
▼L:\Android\copysamplecode\makeitunderstand\Ch03\AnbayasiRoulette\app\src\main\res\layout\activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.kanehiro.anbayasiroulette.MainActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/arrow"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<android.support.v7.widget.RecyclerView
android:id="@+id/cardList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_toRightOf="@id/imageView"/>
</RelativeLayout>