作ればわかる! Androidプログラミング 第4版

書籍作ればわかる! Androidプログラミング 第4版

Link

 状態:-  閲覧数:752  投稿日:2018-05-09  更新日:2018-05-09

P58 明示的なインテント / MultiActivity

 閲覧数:291 投稿日:2018-05-11 更新日:2018-05-16

アプリ起動したら最初に表示されるアクティビティ


「<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

 閲覧数:271 投稿日:2018-05-16 更新日:2018-06-10

明示的な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 魅惑のあんばやしルーレット

 閲覧数:300 投稿日:2018-06-11 更新日:2018-09-13

エラー対応


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;

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"/>

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>





週間人気ページランキング / 4-29 → 5-5
順位 ページタイトル抜粋 アクセス数
アクセスが、ありませんでした! 0
2024/5/6 1:01 更新