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

Android

DialogFragmentとActivity間でのデータの受け渡し練習。

Q1
リストビューに表示されたアイテムを長押しで削除できるようにする。その際確認のダイアログを表示すること。

[実行例]

スタート画面

項目を長押しするとダイアログを表示する
(下図はitem2を長押しした場合)

はいを押すと項目が削除される

●activity_main.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    android:layout_width="match_parent"
05    android:layout_height="match_parent"
06   >
07 
08    <ListView
09        android:id="@+id/lv"
10        android:layout_width="368dp"
11        android:layout_height="495dp"
12        app:layout_constraintTop_toTopOf="parent"
13        android:layout_marginTop="8dp"
14        android:layout_marginLeft="8dp"
15        app:layout_constraintLeft_toLeftOf="parent"
16        android:layout_marginRight="8dp"
17        app:layout_constraintRight_toRightOf="parent" />
18</android.support.constraint.ConstraintLayout>

●MainActivity.java

01import android.app.Dialog;
02import android.app.DialogFragment;
03import android.content.DialogInterface;
04import android.os.Bundle;
05import android.support.v7.app.AlertDialog;
06import android.support.v7.app.AppCompatActivity;
07import android.view.View;
08import android.widget.AdapterView;
09import android.widget.ArrayAdapter;
10import android.widget.ListView;
11import android.widget.Toast;
12 
13import java.util.ArrayList;
14import java.util.List;
15 
16public class MainActivity extends AppCompatActivity {
17    private ListView lv;
18    private ArrayAdapter<String> adapter;
19    private List<String> list=new ArrayList<>();
20 
21 
22    @Override
23    protected void onCreate(Bundle savedInstanceState) {
24        super.onCreate(savedInstanceState);
25        setContentView(R.layout.activity_main);
26        lv=(ListView)findViewById(R.id.lv);
27        list.add("item1");
28        list.add("item2");
29        list.add("item3");
30        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
31        lv.setAdapter(adapter);
32        lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
33            @Override
34            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
35                String item=list.get(position);
36                DialogFragment dialog=new MyDialog();
37 
38                Bundle bundle=new Bundle();
39                bundle.putString("item",item);
40                dialog.setArguments(bundle);
41 
42                dialog.show(getFragmentManager(),"tag");
43                return true;
44            }
45        });
46 
47    }
48    public void deleteItem(String item){
49        adapter.remove(item);
50        Toast.makeText(this,item+"を削除しました",Toast.LENGTH_SHORT).show();
51 
52    }
53    public static class MyDialog extends android.app.DialogFragment{
54        @Override
55        public Dialog onCreateDialog(Bundle savedInstanceState) {
56            final String item=getArguments().getString("item");
57            AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
58            builder.setTitle("確認")
59                    .setMessage("["+item+"]本当に削除してよろしいですか?")
60                    .setPositiveButton("はい", new DialogInterface.OnClickListener() {
61                        @Override
62                        public void onClick(DialogInterface dialog, int which) {
63                            MainActivity activity=(MainActivity)getActivity();
64                            activity.deleteItem(item);
65                        }
66                    })
67                    .setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
68                        @Override
69                        public void onClick(DialogInterface dialog, int which) {
70 
71                        }
72                    });
73 
74            return builder.create();
75        }
76    }
77 
78}

コメント

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