ListView,ArrayAdapter基本問題。
Q1
Red,Green,Blueと表示されるリストビューを作成し、項目をクリックすると和名をその色で表示する。長押しすると項目を削除する。
[実行例]
スタート画面
項目をタップするとその和名がその色で下部に表示される。
(下図はGreenをタップ時)
項目長押しで削除
(下図はGreenを長押し)
●activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lv" android:layout_width="0dp" android:layout_height="200dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginTop="8dp" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tvResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginTop="20dp" android:textSize="24sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/lv" /> </android.support.constraint.ConstraintLayout>
●MainActivity.java
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウトをセット setContentView(R.layout.activity_main); //RGBクラスのリストを用意 final List<RGB> list=new ArrayList<>(); //リストにRGBインスタンスを追加、色はColorクラスで定義されている list.add(new RGB("Red","赤", Color.RED)); list.add(new RGB("Green","緑", Color.GREEN)); list.add(new RGB("Blue","青", Color.BLUE)); //findView(finalは匿名クラス内で参照できるようにするため) final TextView tvResult=(TextView)findViewById(R.id.tvResult); ListView lv=(ListView)findViewById(R.id.lv); //adapterを作成 final ArrayAdapter<RGB> adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,list); //リストビューがアダプターをセットすると表示される lv.setAdapter(adapter); //アイテムロングクリックリスナー lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { tvResult.setText(""); //リストから直接項目を削除する。 list.remove(position); //アダプターに通知 adapter.notifyDataSetChanged(); //イベント消費する。 return true; } }); //アイテムクリックリスナー lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //リストからRGBを取得 RGB rgb=list.get(position); //インスタンス情報をもとにTextViewに設定 tvResult.setTextColor(rgb.getColorCode()); tvResult.setText(rgb.getColorJP()); } }); } //RGBクラス static class RGB{ private String colorEN; private String colorJP; private int colorCode; public RGB(String colorEN,String colorJP,int colorCode){ this.colorEN=colorEN; this.colorJP=colorJP; this.colorCode=colorCode; } //toStringの内容がリストビューに表示される。 @Override public String toString() { return this.colorEN; } public int getColorCode(){ return this.colorCode; } public String getColorJP(){ return this.colorJP; } } }
コメント