java - 为 Android 警报对话框创建模型类

标签 java android listview model-view-controller android-dialogfragment

在我的 Android 应用程序中,我创建了两个对话框 fragment 类。第一个对话框 fragment 提供了公司名称列表。单击主页上的按钮时将出现此对话框。此警报对话框有一个标题、listView 和一个取消按钮,如下所示 -

 Company
Company 1
Company 2
Company 3
 Cancel

现在,只要用户单击第一个对话框的每个项目,就会出现第二个对话框。第二个对话框包含标题“联系方式”、 ListView 和取消按钮。

  Way of Contact
    Phone
    Email
    Copy

现在第二次点击与第一次点击之间存在关系。如果用户点击公司 1,他将获得公司 1 的电话号码,如果用户点击公司 2,他将获得公司 2 的电话号码。电子邮件 ID 也会发生类似的情况。

到目前为止,我的代码硬编码太多。无论如何我已经实现了这段代码。但我对解决这个问题的方式并不满意。现在我想以面向对象的方式进行更多。我读过,公司的枚举可能是保持公司名称不变,然后使用电话和电子邮件创建映射的一种可能性。但我在开发领域还是个新手。如果有人告诉我如何做到这一点,这对我来说真的很有帮助。

这是我的 FirstDialog 类代码

编辑第一个对话框 fragment

    public class FirstAlerDialogFragment extends DialogFragment {

    private ListView listView;
    private Button cancelButton;
    private TextView title;
    private ArrayAdapter<CompanyName> adapter;

    public FirstAlerDialogFragment() {

    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setCancelable(true);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false);

        //Button,ListView1 Initialization
        listView=(ListView) rootView.findViewById(listView1);
        cancelButton=(Button) rootView.findViewById(R.id.cancel_button);
        title=(TextView)rootView.findViewById(R.id.title);
        title.setText("Contact");

        //Create and set Adepter TO ListView1
        adapter=new ArrayAdapter<>(this.getActivity(),R.layout.first_alertlist_textstyle,R.id.Itemname,CompanyName.values());
        listView.setAdapter(adapter);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index
                int itemPosition = position;

                dismiss();
                FragmentManager fm = getFragmentManager();
                Bundle args = new Bundle();
                args.putInt("position", itemPosition);
                SecondAlertDialogFragment dialogFragment = new SecondAlertDialogFragment ();
                dialogFragment.show(fm, "dialogFragment");
                dialogFragment.setArguments(args);
                dialogFragment.show(getChildFragmentManager(), null);

            }
        });
        return rootView;
    }
}

编辑第二个对话框

public class ContactWayFragment extends DialogFragment{

private ListView listView;
private Button cancelButton;
private String[] contactWay;
private TextView title;
private ArrayAdapter<String> adapter;
private String phoneNumber, email;

public ContactWayFragment() {
  //Empty Constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setCancelable(true);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
}

private Company[] companies = new Company[] {
        new Company("123", "mail1.com"),
        new Company("456", "mail2.com"),
        new Company("789", "mail3.com"),
        new Company("102", "mail4.com"),
        new Company("458", "mail5.com"),
        new Company("977", "mail6.com")
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle args) {

    View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false);

    //Button,ListView1 Initialization
    listView=rootView.findViewById(R.id.listView);
    cancelButton=rootView.findViewById(R.id.cancel_button);
    title=rootView.findViewById(R.id.title);
    title.setText("What do you want to do");
    // Defined Array values to show in ListView
    contactWay = getResources().getStringArray(R.array.contact_way);
    //Create and set Adepter TO ListView1
    adapter=new ArrayAdapter<>(getActivity(), R.layout.first_alertlist_textstyle,android.R.id.text1,contactWay);
    listView.setAdapter(adapter);
    //cancel button to cancel this alert dialog
    cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            // ListView Clicked item index
            Bundle args = getArguments();
            int itemPosition = args.getInt("position");
            Company company = companies[itemPosition];

            if (position == 0) {
                //dismiss();
                //Phone Call Alert
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Calling to " + company.getPhoneNumber());
                builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    //make a phone call
                        dialog.dismiss();
                        Log.e("getActivity()-Call",""+getActivity());
                        call_action();
                    }
                });
                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do nothing
                        dialog.dismiss();
                    }
                });

                AlertDialog alert = builder.create();
                alert.show();

            }
            if (position == 1) {
                dismiss();

                //Email Alert Dialog
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Email to " + company.getEmail());
                builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do nothing
                        dialog.dismiss();
                    }
                });
                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do nothing
                        dialog.dismiss();
                    }
                });

                AlertDialog alert = builder.create();
                alert.show();
            }
            if (position == 2) {
                dismiss();
                Toast.makeText(getActivity(), "click 2", Toast.LENGTH_SHORT).show();
            }
            if (position == 3) {
                dismiss();
                Toast.makeText(getActivity(), "click 3", Toast.LENGTH_SHORT).show();
            }
        }
    });
    return rootView;
}
public void call_action() {
...
    }

}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,  int[] grantResults) {
    ....
      }
   }
}

编辑后的代码

在答案代码的帮助下,我更改了代码示例

 public enum CompanyName {
    COM1("FirstCompany"),
    COM2("SecondCompany"),
    COM3("ThirdCompany");

    private final String name;

    private CompanyName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }

    @Override
    public String toString() {
        return name;
    }
}

公司模型类是

    public class Company {

    private CompanyName name;
    private String phone;
    private String email;

    public Company(String phone, String email) {

        this.phone = phone;
        this.email = email;

    }

    public CompanyName getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

最佳答案

确实,那个 switch/case 看起来有点硬编码。您可以做的是使用包含每个公司信息的对象数组。

这将是您的公司模型对象:

public class Company {
    String phoneNumber, email;

    public  Company(String phoneNumber, String email) {
        this.phoneNumber = phoneNumber;
        this.email = email;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public String getEmail() {
        return email;
    }
}

这将是数组声明:

private Company[] companies = new Company[] {
    new Company("38888180", "email1.com"),
    new Company("411660", "email2.com"),
    new Company("895402260", "email3.com")
};

最后,要访问电子邮件或电话号码,您只需执行以下操作:

    ...
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            // ListView Clicked item index

            Bundle args = getArguments();
            //args = getArguments();

            int itemPosition = args.getInt("position");
            Company company = companies[itemPosition];

    ...
        builder.setTitle("Calling to " + company.getPhoneNumber());
    ...
        builder.setTitle("Calling to " + company.getEmail());

关于java - 为 Android 警报对话框创建模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469537/

相关文章:

java - 切换 fragment 后Android应用程序崩溃

java - 如何使用 BaseAdapter 刷新我的 ListView

java - spring:从 Controller 返回 JSON 作为 ModelAndVIew

android - 屏幕开启时,Wi-Fi 或 CPU 可以进入休眠状态吗?

android - 重复动画集

android嵌套 ListView

java - Android 自定义 ListView 不使用 Volley 构建

java - 如何在没有reverse方法的情况下反转ArrayList?

java - 是否可以让 Lotus Notes 中的 Java 识别中文(简体)日期?

c# - 寻找面向服务的电子邮件/通知代理来定制应用程序组合