DialogFragmentとActivity間でのデータの受け渡し練習。
Q1
リストビューに表示されたアイテムを長押しで削除できるようにする。その際確認のダイアログを表示すること。
[実行例]
スタート画面
項目を長押しするとダイアログを表示する
(下図はitem2を長押しした場合)
はいを押すと項目が削除される
●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="368dp" android:layout_height="495dp" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" android:layout_marginLeft="8dp" app:layout_constraintLeft_toLeftOf="parent" android:layout_marginRight="8dp" app:layout_constraintRight_toRightOf="parent" /> </android.support.constraint.ConstraintLayout>
●MainActivity.java
import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AlertDialog; 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.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; private ArrayAdapter<String> adapter; private List<String> list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv=(ListView)findViewById(R.id.lv); list.add("item1"); list.add("item2"); list.add("item3"); adapter=new ArrayAdapter<String>(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) { String item=list.get(position); DialogFragment dialog=new MyDialog(); Bundle bundle=new Bundle(); bundle.putString("item",item); dialog.setArguments(bundle); dialog.show(getFragmentManager(),"tag"); return true; } }); } public void deleteItem(String item){ adapter.remove(item); Toast.makeText(this,item+"を削除しました",Toast.LENGTH_SHORT).show(); } public static class MyDialog extends android.app.DialogFragment{ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final String item=getArguments().getString("item"); AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); builder.setTitle("確認") .setMessage("["+item+"]本当に削除してよろしいですか?") .setPositiveButton("はい", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MainActivity activity=(MainActivity)getActivity(); activity.deleteItem(item); } }) .setNegativeButton("いいえ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); return builder.create(); } } }
コメント