Androidの学習をはじめて11日くらいの人の問題集

Android

アダプターを自作してオリジナルレイアウトのリストビューを作成しよう。

Q1
下部のフォームからデータを入力すると上部のリストビューに追加されていくアプリを作成せよ。
リストのビューはBaseAdapterを継承したクラスを使って作例のようにすること。
画像は以下から画像ダウンロードして使うこと。

[画像]


[実行例]

スタート画面

フォームに入力し登録ボタンを押すと・・・

リストビューに表示される。

性別で女を選ぶと下図のようになる。

●activity_main.xml

001<?xml version="1.0" encoding="utf-8"?>
002<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
003    xmlns:app="http://schemas.android.com/apk/res-auto"
004    android:layout_width="match_parent"
005    android:layout_height="match_parent"
006    >
007 
008    <ListView
009        android:id="@+id/lv"
010        android:layout_width="368dp"
011        android:layout_height="250dp"
012        android:layout_marginLeft="8dp"
013        android:layout_marginRight="8dp"
014        android:layout_marginTop="8dp"
015        app:layout_constraintLeft_toLeftOf="parent"
016        app:layout_constraintRight_toRightOf="parent"
017        app:layout_constraintTop_toTopOf="parent" />
018 
019    <TextView
020        android:id="@+id/textView"
021        android:layout_width="wrap_content"
022        android:layout_height="wrap_content"
023        android:layout_marginLeft="8dp"
024        android:text="名前"
025        app:layout_constraintLeft_toLeftOf="parent"
026        app:layout_constraintBaseline_toBaselineOf="@+id/etName" />
027 
028    <EditText
029        android:id="@+id/etName"
030        android:layout_width="0dp"
031        android:layout_height="wrap_content"
032        android:layout_marginLeft="8dp"
033        android:layout_marginTop="8dp"
034        android:ems="10"
035        android:inputType="textPersonName"
036        app:layout_constraintLeft_toRightOf="@+id/textView"
037        app:layout_constraintTop_toBottomOf="@+id/lv"
038        android:layout_marginRight="8dp"
039        app:layout_constraintRight_toRightOf="parent"
040        app:layout_constraintHorizontal_bias="0.504" />
041 
042    <TextView
043        android:id="@+id/textView2"
044        android:layout_width="wrap_content"
045        android:layout_height="wrap_content"
046        android:layout_marginLeft="8dp"
047        android:text="年齢"
048        app:layout_constraintLeft_toLeftOf="parent"
049        app:layout_constraintBaseline_toBaselineOf="@+id/etAge" />
050 
051    <EditText
052        android:id="@+id/etAge"
053        android:layout_width="0dp"
054        android:layout_height="wrap_content"
055        android:layout_marginLeft="8dp"
056        android:layout_marginRight="8dp"
057        android:layout_marginTop="8dp"
058        android:ems="10"
059        android:inputType="number"
060        app:layout_constraintHorizontal_bias="0.504"
061        app:layout_constraintLeft_toRightOf="@+id/textView2"
062        app:layout_constraintRight_toRightOf="parent"
063        app:layout_constraintTop_toBottomOf="@+id/etName" />
064 
065    <RadioGroup
066        android:layout_width="wrap_content"
067        android:layout_height="wrap_content"
068        android:orientation="horizontal"
069        android:layout_marginTop="7dp"
070        app:layout_constraintTop_toBottomOf="@+id/etAge"
071        android:layout_marginLeft="8dp"
072        app:layout_constraintLeft_toLeftOf="parent"
073        android:layout_marginRight="8dp"
074        app:layout_constraintRight_toRightOf="parent"
075        android:id="@+id/rg"
076        app:layout_constraintHorizontal_bias="0.503">
077 
078        <RadioButton
079            android:id="@+id/rb1"
080            android:layout_width="wrap_content"
081            android:layout_height="wrap_content"
082            android:layout_marginRight="20dp"
083            android:layout_weight="1"
084            android:text="男" />
085 
086        <RadioButton
087            android:id="@+id/rb2"
088            android:layout_width="wrap_content"
089            android:layout_height="wrap_content"
090            android:layout_weight="1"
091            android:text="女" />
092    </RadioGroup>
093 
094    <Button
095        android:id="@+id/button"
096        android:layout_width="wrap_content"
097        android:layout_height="wrap_content"
098        android:layout_marginLeft="8dp"
099        android:layout_marginRight="8dp"
100        android:layout_marginTop="8dp"
101        android:onClick="btClick"
102        android:text="登録"
103        app:layout_constraintLeft_toLeftOf="parent"
104        app:layout_constraintRight_toRightOf="parent"
105        app:layout_constraintTop_toBottomOf="@+id/rg" />
106</android.support.constraint.ConstraintLayout>

●list_item.xml

01<?xml version="1.0" encoding="utf-8"?>
02<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    xmlns:app="http://schemas.android.com/apk/res-auto"
04    xmlns:tools="http://schemas.android.com/tools"
05    android:layout_width="match_parent"
06    android:layout_height="wrap_content"
07    android:paddingBottom="15dp">
08 
09    <ImageView
10        android:id="@+id/iv"
11        android:layout_width="wrap_content"
12        android:layout_height="wrap_content"
13        android:layout_marginLeft="8dp"
14        android:layout_marginTop="8dp"
15        app:layout_constraintLeft_toLeftOf="parent"
16        app:layout_constraintTop_toTopOf="parent"
17        app:srcCompat="@drawable/man" />
18 
19    <TextView
20        android:id="@+id/tvName"
21        android:layout_width="wrap_content"
22        android:layout_height="wrap_content"
23        android:layout_marginLeft="8dp"
24        android:gravity="center_vertical"
25        android:text="TextView"
26        app:layout_constraintLeft_toRightOf="@+id/iv"
27        tools:layout_editor_absoluteY="39dp" />
28 
29    <TextView
30        android:id="@+id/tvAge"
31        android:layout_width="wrap_content"
32        android:layout_height="wrap_content"
33        android:layout_marginLeft="8dp"
34        android:gravity="center_vertical"
35        android:text="TextView"
36        app:layout_constraintLeft_toRightOf="@+id/tvName"
37        tools:layout_editor_absoluteY="39dp" />
38</android.support.constraint.ConstraintLayout>

●Person.java

01public class Person {
02    private String name;
03    private int age;
04    private int resId;
05    public Person(String name,int age,int resId){
06        this.age=age;
07        this.name=name;
08        this.resId=resId;
09    }
10 
11    public int getResId() {
12        return resId;
13    }
14 
15    public String getName() {
16        return name;
17    }
18 
19    public int getAge() {
20        return age;
21    }
22}

●MyAdapter.java

01import android.app.Activity;
02import android.content.Context;
03import android.view.LayoutInflater;
04import android.view.View;
05import android.view.ViewGroup;
06import android.widget.BaseAdapter;
07import android.widget.ImageView;
08import android.widget.TextView;
09 
10import java.util.List;
11 
12public class MyAdapter extends BaseAdapter {
13    private int layout;
14    private List<Person> list;
15    private LayoutInflater inflater;
16    public MyAdapter(Context c,int layout,List<Person> list){
17        inflater=((Activity)c).getLayoutInflater();
18        this.layout=layout;
19        this.list=list;
20 
21    }
22    @Override
23    public int getCount() {
24        return list.size();
25    }
26 
27    @Override
28    public Person getItem(int position) {
29        return list.get(position);
30    }
31 
32    @Override
33    public long getItemId(int position) {
34        return position;
35    }
36 
37    @Override
38    public View getView(int position, View convertView, ViewGroup parent) {
39        Person p=list.get(position);
40        ViewHolder holder;
41        if(convertView == null){
42            convertView=inflater.inflate(layout,null);
43            holder=new ViewHolder(convertView);
44            convertView.setTag(holder);
45        }else{
46            holder=(ViewHolder)convertView.getTag();
47        }
48        holder.iv.setImageResource(p.getResId());
49        holder.tvName.setText(p.getName());
50        holder.tvAge.setText(String.valueOf(p.getAge()));
51 
52        return convertView;
53    }
54    private static class ViewHolder{
55        ImageView iv;
56        TextView tvName;
57        TextView tvAge;
58        public ViewHolder(View v){
59            iv=(ImageView)v.findViewById(R.id.iv);
60            tvName=(TextView)v.findViewById(R.id.tvName);
61            tvAge=(TextView)v.findViewById(R.id.tvAge);
62        }
63    }
64}

●MainActivity.java

01package com.example.mjpurin.viewholderlesson;
02 
03import android.os.Bundle;
04import android.support.v7.app.AppCompatActivity;
05import android.view.View;
06import android.widget.BaseAdapter;
07import android.widget.EditText;
08import android.widget.ListView;
09import android.widget.RadioGroup;
10 
11import java.util.ArrayList;
12import java.util.List;
13 
14public class MainActivity extends AppCompatActivity {
15    private EditText etName,etAge;
16    private ListView lv;
17    private RadioGroup rg;
18    private List<Person> list=new ArrayList<>();
19    private BaseAdapter adapter;
20    @Override
21    protected void onCreate(Bundle savedInstanceState) {
22        super.onCreate(savedInstanceState);
23        setContentView(R.layout.activity_main);
24        etName=(EditText)findViewById(R.id.etName);
25        etAge=(EditText)findViewById(R.id.etAge);
26        rg=(RadioGroup)findViewById(R.id.rg);
27        lv=(ListView)findViewById(R.id.lv);
28        adapter=new MyAdapter(this,R.layout.list_item,list);
29        lv.setAdapter(adapter);
30    }
31    public void btClick(View v){
32        String name=etName.getText().toString();
33        int age=Integer.parseInt(etAge.getText().toString());
34        int resId=rg.getCheckedRadioButtonId()==R.id.rb1? R.drawable.man:R.drawable.woman;
35        list.add(new Person(name,age,resId));
36        adapter.notifyDataSetChanged();
37        etName.setText("");
38        etAge.setText("");
39        rg.clearCheck();
40    }
41}

コメント

タイトルとURLをコピーしました