カテゴリー:
作ればわかる! 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;
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>