P83 魅惑のあんばやしルーレット

Android開発に関するメモランダム

カテゴリー: 作ればわかる! Androidプログラミング 第4版  閲覧数:350 配信日:2018-06-11 14:14


エラー対応


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>


週間人気ページランキング / 11-17 → 11-23
順位 ページタイトル抜粋 アクセス数
アクセスが、ありませんでした! 0
2024/11/24 1:01 更新
指定期間人気ページランキング / 1970-1-1 → 2024-11-23
順位 ページタイトル抜粋 アクセス数
アクセスが、ありませんでした! 0
2024/11/24 1:01 更新