3.菜单与对话框

1.任务1-选项菜单OptionsMenu

在该应用中,视图根节点为垂直的线性布局,依次放置1个 TextView,显示个人信息;1个 TextView (id 为 tv result),显示选项菜单的选中结果。选项菜单在应用的标题栏右侧,有 3 个点图样或者直接在标题栏上以图标的方式显示点击选项菜单,弹出菜单项。在本例中,仅演示选项菜单的使用方法,功能比较简单,仅在tv_result 上显示被选中菜单项的结果。选项菜单中,“增加”菜单项以图标的形式直接显示在标题栏(或称动作栏、工具栏,“修改”和“删除”项则隐藏在菜单中,通过点击 3 点图样,弹出所隐藏的菜单项

 

 实现

opt_menu.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

my_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/opt_show_id"
        android:title="Show ID" />
    <item
        android:id="@+id/opt_show_name"
        android:title="Show Name" />
    <item
    android:id="@+id/opt_reset"
    android:title="Reset" />
</menu>

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        tv=findViewById(R.id.textView);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.opt_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.opt_show_name:
                tv.setText("Name:zxb");
                break;
            case R.id.opt_show_id:
                tv.setText("ID:20211860129");
                break;
            case R.id.opt_reset:
                tv.setText("ID:20211860129,Name:zxb for reset");
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

2任务2-上下文菜单ContextMenu

布局根节点为垂直的LinearLayout,依次有1个TextView显示个人信息;1个ListView,显示字符串数据。长按ListView,会弹出上下文菜单ContextMenu,有2个菜单项“插入”和“删除”。选择“插入”,则在长按的位置插入1项随机整型数据,并更新列表视图;选择“删除”,则将长按位置对应的数据项删除,并更新列表视图。

 

实现

上下文菜单 XML文件的创建方式与选项菜单基本相同,本任务所使用的上下文菜单ctx_menu.xml具体如代码4-4所示。上下文菜单在逻辑代码上与选项菜单略有不同。上下文菜单不是一个全局的菜单,当用户每次长按所注册的视图,均会触发onCreateContextMenu()重新生成菜单,并且它是需要调用registerForContextMenu()方法对UI对象注册上下文菜单

ctx_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:title="Insert random data"
        android:id="@+id/ctx_insert"
        />
    <item
        android:id="@+id/ctx_delete"
        android:title="Delete"
        />
</menu>

my_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
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.Random;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    ArrayList<String> list=new ArrayList<>();
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        tv=findViewById(R.id.textView);
        ListView lv=findViewById(R.id.listView);

        for(int i=0;i<10;i++){
            String item=String.format("Item%2d",i);
            list.add(item);
        }
        adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        lv.setAdapter(adapter);
        registerForContextMenu(lv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.ctx_menu,menu);
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        int pos=menuInfo.position;
        switch (item.getItemId()){
            case R.id.ctx_insert:
                String data=String.format("Insert:item%03d",new Random().nextInt(1000));
                list.add(pos,data);
                adapter.notifyDataSetChanged();
                break;
            case R.id.ctx_delete:
                list.remove(pos);
                adapter.notifyDataSetChanged();
                break;
        }
        return super.onContextItemSelected(item);
    }
}

3.任务3-对话框AlertDialog

主平面布置图,有一个按钮,当用户单击该按钮,对话框中显示了标题和消息

AlertDialog(警报对话框)

该消息显示您的姓名和学生编号,AlertDialog中有2个按钮,一个表示“OK”,另一个表示”取消“

实现

my_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Your name and ID" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ALERT DIALOG" />


</LinearLayout>

MianActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
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.Random;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getDialog().show();
            }
        });
    }
    private AlertDialog getDialog(){
        AlertDialog.Builder bl=new AlertDialog.Builder(this);
        bl.setTitle("Dialog Title");
        bl.setMessage("Your name and ID");
        bl.setNegativeButton("Cancel",null);
        bl.setPositiveButton("OK",null);
        AlertDialog alertDialog=bl.create();
        return alertDialog;
    }

}

4.任务4-自定义对话框AlertDialog

在中创建仅包含一个TextView的应用,当用户长时间单击文本视图时,显示AlertDialog对话框,

AlertDialog具有自定义视图,其中包含EditText,以及EditText显示,用户可以在EditText中编辑文本,当用户单击“确定”按钮时,TextView通过EditText更新文本。当用户单击“取消”按钮时,否更新发生。

 实现

my_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Your name and ID" />

</LinearLayout>

dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/dialog_view_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="" />
</LinearLayout>

 MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        tv=findViewById(R.id.textView);
        tv.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                showDialog();
                return true;
            }
        });
    }
    private void showDialog(){
        AlertDialog.Builder bl=new AlertDialog.Builder(this);
        bl.setTitle("Edit the TextView");
        View v= LayoutInflater.from(this).inflate(R.layout.dialog_view,null,false);
        final EditText et=v.findViewById(R.id.dialog_view_et);
        et.setText(tv.getText());
        bl.setView(v);
        bl.setNegativeButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                tv.setText(et.getText());
            }
        });
        bl.setPositiveButton("Cancel",null);
        bl.create().show();
    }


}

5.任务5-自定义对话框

创建1个按钮和1个文本视图的应用程序

主要布局:点击弹出一个AlertDialog,其中包含多个选择

当出现以下情况时,用户单击“确定”按钮,TextView显示所选项目

当用户单击“取消”按钮,TextView显示空字符串

 AlertDialog的标题显示您的姓名和学生编号

 实现

my_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Your name and ID" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="MULTIPLE SELECTION" />

</LinearLayout>

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    boolean[] checkTable;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        tv=findViewById(R.id.textView);
        final String[] hobbies=new String[]{"Running","Swimming","BasketBall"};
        checkTable =new boolean[hobbies.length];
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog(hobbies);
            }
        });
    }
    private void showDialog(final String[] hobbies){
        AlertDialog.Builder bl=new AlertDialog.Builder(this);
        bl.setTitle("Select data");
        bl.setMultiChoiceItems(hobbies, checkTable, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                checkTable[which]=isChecked;
            }
        });
        bl.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                tv.setText("");
            }
        });
        bl.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ArrayList<String> list=new ArrayList<>();
                for(int i=0;i<hobbies.length;i++){
                    if(checkTable[i]){
                        list.add(hobbies[i]);
                    }
                }
                tv.setText(list.toString());
            }
        });
        bl.create().show();
    }


}

BigTask3

编写一个程序,1个TextView(用于显示学号姓名)、1个ListView。ListView是风景点的地点名称和风景图片(适配器需要改写)。在所描述功能的基础上,对ListView增加上下文菜单(修改、删除、新增三个功能),修改功能支持对风景地点改名称和图片重选(弹出的对话框中有图文并茂的GridView),并且改完名称后,ListView的名称也会被修改;删除功能则对该风景删除,ListView也会相应更新;新增功能能在弹出的对话框中选择GridView显示的风景进行添加。选项菜单的功能则为:增加风景、重置两个功能。重置功能则将ListView中的风景列表恢复成程序启动时的状态。修改和新增功能弹出的对话框,第一行为EditText和ImageView,第二行为GridView,并有确定和取消按钮

 

 实现

grid_row_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    >

    <ImageView
        android:id="@+id/row_view_iv"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        />

    <TextView
        android:id="@+id/row_view_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="" />
</LinearLayout>

dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="2"
            android:ems="10"
            android:hint="input the name"
            android:inputType="textPersonName"
            android:text="" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:layout_marginRight="10dp"
            android:layout_weight="3"
            app:srcCompat="@mipmap/ic_launcher" />
    </LinearLayout>

    <GridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="2"
        android:stretchMode="columnWidth" />

</LinearLayout>

list_row_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:gravity="center"
android:padding="5dp"
android:layout_height="wrap_content">

<ImageView
    android:id="@+id/row_view_iv"
    android:layout_width="60dp"
    android:layout_height="60dp" />

<TextView
    android:id="@+id/row_view_tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_marginLeft="10dp"
    android:text="TextView" />
</LinearLayout>

my_mian.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="20211860129 郑小波" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Landscape.java

public class Landscape {
    private String name;
    private int img;
    public Landscape(String name, int img){
        this.name = name;
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImg() {
        return img;
    }

    public void setImg(int img) {
        this.img = img;
    }
}

Dialog.java

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;

import java.util.ArrayList;

public class Dialog {
    private Context context;
    private String title;

    public interface OnDialogSubmitListener{
        void onSubmit(Landscape updatedLandscape);
    }
    public Dialog(Context context, String title){
        this.context = context;
        this.title = title;
    }

    public void showDialog(Landscape landscape, final OnDialogSubmitListener l){
        AlertDialog.Builder bl = new AlertDialog.Builder(context);
        bl.setTitle(title);
        View v = LayoutInflater.from(context).inflate(R.layout.dialog_view,null,false);
        final EditText et = v.findViewById(R.id.editText);
        final ImageView img = v.findViewById(R.id.imageView);
        GridView gv = v.findViewById(R.id.gridView);

        if(landscape == null){
            landscape = new Landscape("",R.mipmap.ic_launcher);
        }
        et.setText(landscape.getName());
        img.setImageResource(landscape.getImg());
        img.setTag(landscape.getImg());
        final ArrayList<Landscape> allData =  LandscapeDateCenter.getData();
        LandscapeAdapter adapter = new LandscapeAdapter(context, allData, 2);
        gv.setAdapter(adapter);
        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Landscape index = LandscapeDateCenter.getData().get(i);
                et.setText(index.getName());
                img.setImageResource(index.getImg());
                img.setTag(index.getImg());
            }
        });
        bl.setView(v);
        bl.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                String name = et.getText().toString();
                int picId = (int) img.getTag();
                Landscape updatedLandscape = new Landscape(name, picId);
                if(l != null){
                    l.onSubmit(updatedLandscape);
                }
            }
        });

        bl.setNegativeButton("Cancel",null);
        bl.create().show();
    }
}

LandscapeAdapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class LandscapeAdapter extends ArrayAdapter<Landscape> {
    private Context context;
    private ArrayList<Landscape> list;
    private int type = 1;

    public LandscapeAdapter(Context context, ArrayList<Landscape> list){
        super(context, android.R.layout.simple_list_item_1, list);
        this.context = context;
        this.list = list;
    }
    public LandscapeAdapter(Context context, ArrayList<Landscape> list, int type){
        super(context, android.R.layout.simple_list_item_1, list);
        this.context = context;
        this.list = list;
        this.type = type;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View v;
        if(type == 1) {
            v = LayoutInflater.from(context).inflate(R.layout.list_row_view, null, false);
        } else{
            v = LayoutInflater.from(context).inflate(R.layout.grid_row_view, null, false);
        }


        TextView tv = v.findViewById(R.id.row_view_tv);
        ImageView img = v.findViewById(R.id.row_view_iv);
        tv.setText(list.get(position).getName());
        img.setImageResource(list.get(position).getImg());
        return v;
    }
}

LandscapeDateCenter.java

import java.util.ArrayList;

public class LandscapeDateCenter {
    private static ArrayList<Landscape> list;
    public static ArrayList<Landscape> getData(){
        if(list != null){
            return list;
        } else {
            list = new ArrayList<>();
            list.add(new Landscape("Daluo Mountain", R.drawable.da_luo_shan));
            list.add(new Landscape("Great Wall", R.drawable.great_wall));
            list.add(new Landscape("Lingyin Temple", R.drawable.ling_yin_temple));
            list.add(new Landscape("Nanxi River", R.drawable.nan_xi_river));
            list.add(new Landscape("Olympic Sports Center", R.drawable.olympic_sports_center));
            list.add(new Landscape("Qianjinag CBD", R.drawable.qian_jiang_cbd));
            list.add(new Landscape("The Imperial Palace", R.drawable.the_imperial_palace));
            list.add(new Landscape("West Lake", R.drawable.west_lake));
            list.add(new Landscape("Yandang Mountain", R.drawable.yan_dang_shan));
            return list;
        }
    }
}

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ArrayList<Landscape> list = new ArrayList<>();
    ListView lv ;
    LandscapeAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        lv =  findViewById(R.id.listView);
        adapter = new LandscapeAdapter(this,list);
        lv.setAdapter(adapter);
        list.add(new Landscape("Daluo Mountain", R.drawable.da_luo_shan));
        list.add(new Landscape("Qianjiang CBD", R.drawable.qian_jiang_cbd));
        registerForContextMenu(lv);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.opt_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.opt_add:
                addData();
                break;
            case R.id.opt_reset:
                reset();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.ctx_menu,menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo();
        AdapterView.AdapterContextMenuInfo adapterContextMenuInfo = (AdapterView.AdapterContextMenuInfo)menuInfo;
        final int position = adapterContextMenuInfo.position;
        switch (item.getItemId()){
            case R.id.ctx_add:
                addData();
                break;
            case R.id.ctx_modify:
                modify(position);
                break;
            case R.id.ctx_delete:
                list.remove(position);
                adapter.notifyDataSetChanged();
                break;
        }
        return super.onContextItemSelected(item);
    }

    private void modify(int position) {
        final Landscape landscape = list.get(position);
        new Dialog(this,"Modify Data").showDialog(landscape, new Dialog.OnDialogSubmitListener() {
            @Override
            public void onSubmit(Landscape updatedLandscape) {
                landscape.setName(updatedLandscape.getName());
                landscape.setImg(updatedLandscape.getImg());
                adapter.notifyDataSetChanged();
            }
        });
    }

    public void reset(){
        list.clear();
        list.add(new Landscape("Daluo Mountain", R.drawable.da_luo_shan));
        list.add(new Landscape("Qianjiang CBD", R.drawable.qian_jiang_cbd));
        adapter.notifyDataSetChanged();
    }
    public void addData(){
        new Dialog(this,"Create Data").showDialog(null, new Dialog.OnDialogSubmitListener() {
            @Override
            public void onSubmit(Landscape updatedLandscape) {
                list.add(updatedLandscape);
                adapter.notifyDataSetChanged();
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值