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>