BaseAdapter 画像 & リスト表示 01
MA.java
package tossy.list_base_01;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.BaseAdapter;
import android.widget.ListView;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final String[] names = {
"hanamichi",
"rukawa",
"gori",
"mitui",
"ryouta",
"sendou",
"uozumi",
"sawakita",
"kawata",
"fuzima",
"maki"
};
// drawableに画像を入れる、R.id.xxx はint型
private static final int[] photos = {
R.drawable.hanamichi,
R.drawable.rukawa,
R.drawable.gori,
R.drawable.mitui,
R.drawable.ryouta,
R.drawable.sendou,
R.drawable.uozumi,
R.drawable.sawakita,
R.drawable.kawata,
R.drawable.fuzima,
R.drawable.maki
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] emails = new String[names.length];
// names からメールアドレス作成
for(int i = 0;i < names.length;i++) {
emails[i] = String.format(Locale.US, "%s@gmail.com", names[i]);
}
// ListViewのインスタンスを生成
ListView listView = findViewById(R.id.listView);
// BaseAdapter を継承したadapterのインスタンスを生成
// レイアウトファイル list_items.xml を
// activity_main.xml に inflate するためにadapterに引数として渡す
BaseAdapter adapter = new TestAdapter(this.getApplicationContext(),
R.layout.list_items, names, emails, photos);
// ListViewにadapterをセット
listView.setAdapter(adapter);
}
}
TestAdapter.java
package tossy.list_base_01;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Objects;
/**
* Created by tossy on 2018/04/11.
*/
public class TestAdapter extends BaseAdapter {
private LayoutInflater inflater;
private int layoutID;
private String[] namelist;
private String[] emaillist;
private Bitmap[] photolist;
static class ViewHolder { // setImageBitmap()など、ここで描画させている
TextView text;
TextView email;
ImageView img;
}
TestAdapter(Context context, int itemLayoutId,
String[] names, String[]emails, int[] photos) {
inflater = LayoutInflater.from(context);
layoutID = itemLayoutId;
namelist = names;
emaillist = emails;
// bitmapの配列
photolist = new Bitmap[photos.length];
// drawable の IDから、bitmapに変換
for(int i = 0; i < photos.length; i++) {
photolist[i] = BitmapFactory.decodeResource(context.getResources(), photos[i]);
}
}
@Override
/*parentはそのListenerが登録されているAdapterViewです。viewはクリックされたview、
positionはクリックされたアイテムの表示位置。idはAdapter#getItemId(int)で取得した値です。*/
//Viewの親となるViewGroup
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
convertView = inflater.inflate(layoutID, null);
holder = new ViewHolder(); //一般的なListViewの高速化手法としてViewHolder
// convertView 以前まで表示されていたView
holder.img = convertView.findViewById(R.id.img_item);
holder.text = convertView.findViewById(R.id.text_view);
holder.email = convertView.findViewById(R.id.text_mail);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img.setImageBitmap(photolist[position]);
String str = "TEAM ID" + String.valueOf(position+1)
+ "\n\nEmail: " + emaillist[position]
+ "\nTel: 03-0000-0000" + String.valueOf(position+1);
holder.email.setText(str);
holder.text.setText(namelist[position]);
return convertView;
}
@Override
public int getCount() { // 配列やListの要素数を返す
return namelist.length;
}
@Override
public Object getItem(int position) { // index や オブジェクトを返す
return position;
}
@Override
public long getItemId(int position) { // 特別なIDをindexの他に返す
return position;
}
}
list_items.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_item"
android:layout_width="120dp"
android:layout_height="120dp"
android:scaleType="centerCrop"
android:layout_margin="5dp"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/text_mail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
android:layout_marginBottom="10dp"
/>
<TextView
android:id="@+id/text_view"
android:textColor="#04e"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
/>
</LinearLayout>
</LinearLayout>
ac_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:padding="10dp"
android:background="#fafafa"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:divider="@android:color/transparent"
android:dividerHeight="4dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>