【问题标题】:Second AlertDialog list item click based on the first Alertdialog list android第二个AlertDialog列表项点击基于第一个AlertDialog列表android
【发布时间】:2023-03-23 01:57:01
【问题描述】:

在我的 android 应用程序中,我需要生成一个带有公司名称列表的 Alertdialog。例如公司 1、公司 2、公司 3。现在如果用户单击公司 1,他将获得第二个警报对话框,其中将显示一些操作。像电话、电子邮件等。现在我已经在我的代码中实现了这两个警报对话框。但我想做的是,对于每家公司,应该有不同的电话号码和电子邮件地址。到目前为止,我已经尝试与所有公司使用相同的号码。但在现实中,如果用户点击公司 1,他将获得第二个行动警报列表,其中包括电话、电子邮件。如果他点击电话选项,他会看到电话号码公司 1,如果他点击公司 2,他会收到带有公司 2 电话号码的警报选项。但我是开发区的新手。我知道有一些与映射主题有关的东西,我可以通过它轻松地做到这一点,但我实际上并没有得到如何继续它。我的代码是这样的

    public List<CompanyDetail> setCompanydata(){
    int n = 3;
    private List<CompanyDetail> companyDetailList = new ArrayList<CompanyDetail>(); //modifier private is not allowed here
    private HashMap<String, List<CompanyDetail>> companyContactDetail = new HashMap<String, List<CompanyDetail>>(); //modifier private is not allowed here
    for(int i=0;i<n;i++){
        private CompanyDetail  comD= new CompanyDetail(); //modifier private is not allowed here
        comD.setcompanyPhoneNo(companyPhoneno); //cannot resolve problem companyPhone
        comD.setcompanyEmail(compnayEmailId);
        companyDetailList.add(comD);
        companyContactDetail.add(companyname, companyDetailList);//cannot resolve method 'add(?,java util list..
    }

    return companyContactDetail; //incompatible type

}
private List<CompanyDetail> companyDetailList;
private HashMap<String, List<CompanyDetail>> companyContactDetail = new HashMap<String, List<CompanyDetail>>();
companyContactDetail =  setCompanydata(); //unknown class company contact deatil

private void showFirstDialogwithList() {

    //Create a new builder and get the layout.
    final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
    LayoutInflater inflater = this.getActivity().getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.first_alertlist_contact, null);
    builder.setView(dialogView);
    builder.setCancelable(true);
    //Show the dislog
    final AlertDialog alert = builder.show();
    //Get the TextView, ListView, Button from the layout.
    TextView alertTitle = (TextView) dialogView.findViewById(R.id.title);
    Button alertButton = (Button) dialogView.findViewById(R.id.cancel_button);
    ListView alertListView = (ListView) dialogView.findViewById(listView1);

    alertTitle.setText("Contact");
    // Defined Array values to show in ListView
    String[] values = getResources().getStringArray(R.array.company_name);


    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), R.layout.first_alertlist_textstyle, android.R.id.text1, values);
    alertListView.setAdapter(arrayAdapter);

    alertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alert.dismiss();
        }
    });

    alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

            if (itemPosition == 0) {
                alert.dismiss();
                showSecondDialogwithList();
            }

            if (itemPosition == 1) {
                alert.dismiss();
                showSecondDialogwithList();
            }
            if (itemPosition == 2) {
                alert.dismiss();
                showSecondDialogwithList();
            }

        }

    });
}

private void showSecondDialogwithList() {

    final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity(), R.style.DialogStyle);
    LayoutInflater inflater = this.getActivity().getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.first_alertlist_contact, null);
    builder.setView(dialogView);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);

    //Show the dislog
    final AlertDialog alert = builder.show();

    //Get the TextView, ListView, Button from the layout.
    TextView alertTitle = (TextView) dialogView.findViewById(R.id.title);
    Button alertButton = (Button) dialogView.findViewById(R.id.cancel_button);
    final ListView alertListView = (ListView) dialogView.findViewById(listView1);

    alertTitle.setText("What do you want to do");
    // Defined Array values to show in ListView
    String[] values = getResources().getStringArray(R.array.contact_way);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),
            R.layout.first_alertlist_textstyle, android.R.id.text1, values);
    alertListView.setAdapter(adapter);

    alertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alert.dismiss();
        }
    });

    alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

            if (itemPosition == 0) {

                alert.dismiss();
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

                builder.setTitle("+1234667");
                builder.setPositiveButton("Call", new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                        // close the dialog, go to login page
                        if(isPermissionGranted()){
                            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 (itemPosition == 1) {
                alert.dismiss();
                ......;

            }
            if (itemPosition == 2) {
                dismiss();
                showEmail();

            }
            if (itemPosition == 3) {
                dismiss();

            }
        }
    });

}

我的字符串数组是

    <string-array name="company_name">
    <item>company 1</item>
    <item>Company 2</item>
    <item>Company 3</item>
</string-array>

<!-- AlertDialog way of Contact array -->
<string-array name="contact_way">
    <item>Phone Call</item>
    <item>Email</item>
</string-array>

<String-array name="phone">
    <item>123456</item>
    <item>125658</item>
    <item>123451</item>
</String-array>

<String-array name="email">
    <item>email1</item>
    <item>email2</item>
    <item>email2</item>
</String-array>

【问题讨论】:

    标签: android linked-list hashmap mapping android-alertdialog


    【解决方案1】:

    您可以传递该项目的位置并在您的function 进行测试,或者您可以直接传递它:

    @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            alert.dismiss();
            showSecondDialogwithList(position);
        }
    
    private void showSecondDialogwithList(int position) {
        String phoneNumber;
        switch (position) {
            case 1:
                phoneNumber = "123";
                break;
            case 2:
                phoneNumber = "456";
                break;
            case 3:
                phoneNumber = "789"
        }
        final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity(), R.style.DialogStyle);
        LayoutInflater inflater = this.getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.first_alertlist_contact, null);
        builder.setView(dialogView);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
        //Show the dislog
        final AlertDialog alert = builder.show();
        //Get the TextView, ListView, Button from the layout.
        TextView alertTitle = (TextView) dialogView.findViewById(R.id.title);
        Button alertButton = (Button) dialogView.findViewById(R.id.cancel_button);
        final ListView alertListView = (ListView) dialogView.findViewById(listView1);
    
        alertTitle.setText("What do you want to do");
        // Defined Array values to show in ListView
        String[] values = getResources().getStringArray(R.array.contact_way);
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),
                R.layout.first_alertlist_textstyle, android.R.id.text1, values);
        alertListView.setAdapter(adapter);
    
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alert.dismiss();
            }
        });
    
        alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index
                int itemPosition = position;
                if (itemPosition == 0) {
                    alert.dismiss();
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("+1234667");
                    builder.setPositiveButton("Call", new DialogInterface.OnClickListener() {
    
                        public void onClick(DialogInterface dialog, int which) {
                            // close the dialog, go to login page
                            if (isPermissionGranted()) {
                                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 (itemPosition == 1) {
                    alert.dismiss();
                ......;
    
                }
                if (itemPosition == 2) {
                    dismiss();
                    showEmail();
    
                }
                if (itemPosition == 3) {
                    dismiss();
    
                }
            }
        });
    
    }
    

    【讨论】:

    • 如何在此处设置标题 builder.setTitle("+1234667");根据phoneNumber的位置
    【解决方案2】:

    要深入了解这种场景背后的逻辑,最好使用*HashMap*。 根据你的情况。我更改了您的代码,请查看:

    public class CompanyDetail{
       String companyPhoneNo;
       String companyEmail;
       public void setcompanyPhoneNo(String phoneNo){
           this.companyPhoneNo = phoneNo;
       }
       public void setcompanyEmail(String Email){
           this.companyEmail = Email;
       }
       public String getcompanyPhoneNo(){
           return companyPhoneNo;
       }
       public String getcompanyEmail(){
           return companyEmail;
       }
    
    }
    
    public HashMap<String, List<CompanyDetail>> setCompanydata(){
        int n = 3;
        private List<CompanyDetail> companyDetailList = new ArrayList<CompanyDetail>();
        private HashMap<String, List<CompanyDetail>> companyContactDetail = new HashMap<String, List<CompanyDetail>>();
        for(int i=0;i<n;i++){
         CompanyDetail  comD= new CompanyDetail();
        comD.setcompanyPhoneNo(companyPhoneno);
        comD.setcompanyEmail(compnayEmailId);
        companyDetailList.add(comD);
        companyContactDetail.add(companyname, companyDetailList);
        }
    
        return companyContactDetail;
    
    }
    
    private List<CompanyDetail> companyDetailList;
    private HashMap<String, List<CompanyDetail>> companyContactDetail;
    companyContactDetail =  setCompanydata();
    
    
    
    private void showFirstDialogwithList() {
    
    
        //Create a new builder and get the layout.
        final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
        LayoutInflater inflater = this.getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.first_alertlist_contact, null);
        builder.setView(dialogView);
        builder.setCancelable(true);
        //Show the dislog
        final AlertDialog alert = builder.show();
        //Get the TextView, ListView, Button from the layout.
        TextView alertTitle = (TextView) dialogView.findViewById(R.id.title);
        Button alertButton = (Button) dialogView.findViewById(R.id.cancel_button);
        ListView alertListView = (ListView) dialogView.findViewById(listView1);
    
        alertTitle.setText("Contact");
        // Defined Array values to show in ListView
        String[] values = getResources().getStringArray(R.array.company_name);
    
    
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), R.layout.first_alertlist_textstyle, android.R.id.text1, values);
        alertListView.setAdapter(arrayAdapter);
    
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alert.dismiss();
            }
        });
    
        alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index
                int itemPosition = position;
    
                if (itemPosition == 0) {
                    alert.dismiss();
                    companyDetailList1  = companyContactDetail.get(companyNameatPosition);
                    showSecondDialogwithList(Companyname,companyDetailList1 );
                }
    
                if (itemPosition == 1) {
                    alert.dismiss();
                    companyDetailList1  = companyContactDetail.get(companyNameatPosition);
                    showSecondDialogwithList(Companyname,companyDetailList1 );
                    showSecondDialogwithList();
                }
                if (itemPosition == 2) {
                    alert.dismiss();
                    companyDetailList1  = companyContactDetail.get(companyNameatPosition);
                    showSecondDialogwithList(Companyname,companyDetailList1 );
                    showSecondDialogwithList();
                }
    
            }
    
        });
    }
    
    private void showSecondDialogwithList( String companyName,  List<CompanyDetail> companyDetail) {
        CompanyDetail obj = companyDetail.get(0);
        private String companyPhone  = obj.getcompanyPhoneNo();
        private String companyEmail = obj.getcompanyEmail();
    
    
    
        final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity(), R.style.DialogStyle);
        LayoutInflater inflater = this.getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.first_alertlist_contact, null);
        builder.setView(dialogView);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
    
        //Show the dislog
        final AlertDialog alert = builder.show();
    
        //Get the TextView, ListView, Button from the layout.
        TextView alertTitle = (TextView) dialogView.findViewById(R.id.title);
        Button alertButton = (Button) dialogView.findViewById(R.id.cancel_button);
        final ListView alertListView = (ListView) dialogView.findViewById(listView1);
    
        alertTitle.setText("What do you want to do");
        // Defined Array values to show in ListView
        String[] values = getResources().getStringArray(R.array.contact_way);
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),
                R.layout.first_alertlist_textstyle, android.R.id.text1, values);
        alertListView.setAdapter(adapter);
    
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alert.dismiss();
            }
        });
    
        alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index
                int itemPosition = position;
    
                if (itemPosition == 0) {
    
                    alert.dismiss();
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    
                    builder.setTitle(companyPhone);
                    builder.setPositiveButton("Call", new DialogInterface.OnClickListener() {
    
                        public void onClick(DialogInterface dialog, int which) {
                            // close the dialog, go to login page
                            if(isPermissionGranted()){
                                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 (itemPosition == 1) {
                    alert.dismiss();
                    ......;
    
                }
                if (itemPosition == 2) {
                    dismiss();
                    showEmail();
    
                }
                if (itemPosition == 3) {
                    dismiss();
    
                }
            }
        });
    
    }
    

    【讨论】:

    • 这里的 CompanyDeutil 是什么。你能解释一下吗?你在这里用过什么课吗?
    • CompanyDetails 基本上就是电话号码、邮箱id等。
    • like: c1 -> { phone no, emailId, etc.}, c2 -> { phone no, emailId, etc.} 等等
    • 能否请您举一个我的例子。
    • 当然,我可以给你一个例子来修改你的代码
    【解决方案3】:

    一个一个地显示两个对话框不是一个好习惯。当然,您可以像上面描述的那样实现它,但是最好显示带有公司列表(ListView,RecyclerView)的单独活动(片段),然后单击每个项目将显示带有所需参数的对话框。从设计和用户体验来看,它会更好看。

    【讨论】:

    • Cpuld 请多解释一下我该怎么做。我以前尝试过使用对话框片段。但无法成功实现对话。可能与主题无关。但我听说对话的通用类是实现 Alerdiaolg 的方法之一。多解释一下就好了
    • 最简单的情况是使用 ListView(for start)。创建一个单独的活动并在活动的布局中放置
    • 这意味着我必须为 Dialog 启动一个单独的活动,然后我将在其中编写 firstAlerdialog 和第二个 alertDialog
    • 你能给我举个例子吗
    • 没有。您将只有一个对话框。最简单的情况是使用 ListView(for start)。因此,创建一个单独的活动并在活动的布局中放置 ListView。您可以查看this 示例或阅读官方文档中的here。然后添加到您的 ListView setOnItemClickListener()。并在 onclick 中显示您的对话框。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多