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

Android

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();
        }
    }

}



コメント

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