代码之家  ›  专栏  ›  技术社区  ›  user8206380

取消按钮不工作AlertDialod Android

  •  0
  • user8206380  · 技术社区  · 7 年前

    public class AlertDialogFragment extends DialogFragment{
    
    private ListView listView1;
    private ListView listView2;
    private Button cancelButton1;
    private Button cancelButton2;
    private String[] companyName;
    private String[] actionName;
    private ArrayAdapter<String> adapter;
    
    public AlertDialogFragment(){
            // Required empty public constructor
    }
    
    @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);
    
            //Set Title Dialog
            getDialog().setTitle("Contact");
    
            //Button,ListView1 Initialization
            listView1=(ListView) rootView.findViewById(R.id.listView1);
            cancelButton1=(Button) rootView.findViewById(R.id.cancel_button1);
    
            // Defined Array values to show in ListView
            companyName = getResources().getStringArray(R.array.company_name);
    
            //Create and set Adepter TO ListView1
            adapter=new ArrayAdapter<String>(getActivity(), R.layout.first_alertlist_textstyle,android.R.id.text1,companyName);
            listView1.setAdapter(adapter);
    
            cancelButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dismiss();
                }
            });
    
           listView1.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)
                    {
                        dismiss();
                        showDialog2();
                    }
    
                    if(itemPosition == 1)
                    {
                        dismiss();
                        showDialog2();
                    }
                    if(itemPosition == 2)
                    {
                        ....
                    }
                }
    
            });
            return rootView;
        }
    
        private void showDialog2(){
    
            final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this.getActivity(), R.style.DialogStyle);
            LayoutInflater inflater = this.getActivity().getLayoutInflater();
            View dialogView = inflater.inflate(R.layout.second_alertlist_contact, null);
            dialogBuilder.setView(dialogView);
    
            listView2 = (ListView) dialogView.findViewById(R.id.listView2);
            cancelButton2=(Button) dialogView.findViewById(R.id.cancel_button2);
    
    
            // Defined Array values to show in ListView
            actionName = getResources().getStringArray(R.array.contact_way);
    
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),
                    R.layout.first_alertlist_textstyle, android.R.id.text1, actionName);
    
            listView2.setAdapter(adapter);
    
            listView2.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)
                    {
                        dismiss();
                        System.out.println("Hello");;
                    }
    
                   ...
    
                }
    
            });
            cancelButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dismiss();
                }
            });
    
            dialogBuilder.show();
    
    
        }
    

    这是我的第一个AlertDialog的XML代码

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="15dp"
            android:paddingBottom="15dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="Contact"
            android:gravity="center_horizontal"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            android:layout_gravity="center"
            android:textColor="#FFFFFF"
            android:background="#283593"/>
    
        <ListView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/listView1"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            >
        </ListView>
    
        <Button
            android:id="@+id/cancel_button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            android:text="Cancel"
            android:textColor="#FFFFFF"
            android:background="#283593"/>
    
       </LinearLayout>
    

    和第二个警报的XML代码

    <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/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="What do you want to do"
        android:gravity="center_horizontal"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:layout_gravity="center"
        android:textColor="#FFFFFF"
        android:background="#283593"/>
    
    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/listView2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="center"
        >
    </ListView>
    
    <Button
        android:id="@+id/cancel_button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:text="Cancel"
        android:textColor="#FFFFFF"
        android:background="#283593"/>
    

    2 回复  |  直到 7 年前
        1
  •  0
  •   letsCode    7 年前

    由于我的声誉,我不得不将此作为一个答案而不是评论。但是,AlertDialog是否包含列表视图?

    标题
    列表视图
    取消

    如果是这样的话,我会编辑这篇文章作为解决方案。你的代码很奇怪……所以我认为最好是从头开始。

    用以下代码编辑

    //Create a new builder and get the layout.
    final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    View builderView = getLayoutInflater().inflate(R.layout.alert_listview, null);
    
    //Set the layout inside of the builder
    builder.setView(builderView);
    
    //Show the dislog
    final AlertDialog alert = builder.show();
    
    //Get the TextView, ListView, Button from the layout.
    TextView alertTitle = (TextView) builderView.findViewById(R.id.alertTitle);
    Button alertButton = (Button) builderView.findViewById(R.id.alertButton);
    ListView alertListView = (ListView) builderView.findViewById(R.id.listView);
    
    alertTitle.setText("YOU CAN SET THIS TO WHATEVER");
    
    //Click the alert button from within the alert will dismiss the dialog box
    alertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            alert.dismiss();
        }
    });
    

    alert\u listview.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:padding="10dp"
            android:gravity="center"
            android:text="Title"
            android:id="@+id/alertTitle"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_below="@+id/alertTitle">
            <ListView
                android:layout_width="match_parent"
                android:id="@+id/listView"
                android:layout_height="0dip"
                android:layout_weight="1"/>
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:id="@+id/alertButton"
                android:text="BUTTON"/>
        </LinearLayout>
    
    </RelativeLayout>
    

    这是对话框中的列表

    //Create a new builder and get the layout.
    final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    View builderView = getLayoutInflater().inflate(R.layout.alert_listview, null);
    
    //Set the layout inside of the builder
    builder.setView(builderView);
    
    //Show the dislog
    final AlertDialog alert = builder.show();
    
    List<String> arrayList = new ArrayList<String>();
    arrayList.add("1");
    arrayList.add("2");
    arrayList.add("3");
    arrayList.add("4");
    arrayList.add("5");
    arrayList.add("6");
    arrayList.add("7");
    arrayList.add("8");
    arrayList.add("9");
    arrayList.add("10");
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, arrayList);
    
    //Get the TextView, ListView, Button from the layout.
    TextView alertTitle = (TextView) builderView.findViewById(R.id.alertTitle);
    Button alertButton = (Button) builderView.findViewById(R.id.alertButton);
    ListView alertListView = (ListView) builderView.findViewById(R.id.listView);
    
    alertListView.setAdapter(arrayAdapter);
    
    alertTitle.setText("YOU CAN SET THIS TO WHATEVER");
    
    //Click the alert button from within the alert will dismiss the dialog box
    alertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            alert.dismiss();
        }
    });
    
        2
  •  0
  •   yash786    7 年前
    /**Just Implement the below code **/
    
    companyName = getResources().getStringArray(R.array.company_name);
    
    selectData(companyName);
    
    private void selectData(final ArrayList<String> array_data)
    {
        final Dialog dialog_data = new Dialog(context);
    
        dialog_data.requestWindowFeature(Window.FEATURE_NO_TITLE);
    
        dialog_data.getWindow().setGravity(Gravity.CENTER);
    
        dialog_data.setContentView(R.layout.custom_alertdialog);
    
        WindowManager.LayoutParams lp_number_picker = new WindowManager.LayoutParams();
        Window window = dialog_data.getWindow();
        lp_number_picker.copyFrom(window.getAttributes());
    
        lp_number_picker.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp_number_picker.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
        window.setGravity(Gravity.CENTER);
        window.setAttributes(lp_number_picker);
    
    
    
        TextView alertdialog_textview = (TextView) dialog_data.findViewById(R.id.alertdialog_textview);
        alertdialog_textview.setText("Contact");
        alertdialog_textview.setHint("Contact");
    
        Button dialog_cancel_btn = (Button) dialog_data.findViewById(R.id.dialog_cancel_btn);
        dialog_cancel_btn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(dialog_data != null)
                {
                    dialog_data.dismiss();
                    dialog_data.cancel();
                }
    
            }
        });
    
        EditText filterText = (EditText) dialog_data.findViewById(R.id.alertdialog_edittext);
        ListView alertdialog_Listview = (ListView) dialog_data.findViewById(R.id.alertdialog_Listview);
        alertdialog_Listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        final ArrayAdapter<String>  adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_single_choice, array_data);
        alertdialog_Listview.setAdapter(adapter);
        alertdialog_Listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id)
            {
                actionName = getResources().getStringArray(R.array.contact_way);
    
                int itemPosition = position;
    
                if(itemPosition == 0)
                {
                    selectData(actionName);
                }
    
                if(itemPosition == 1)
                {
                    selectData(actionName);
                }
                if(itemPosition == 2)
                {
                    ....
                }
    
    
    
                if(dialog_data != null)
                {
                    dialog_data.dismiss();
                    dialog_data.cancel();
                }
            }
        });
    
        filterText.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
    
            }
    
            @Override
            public void afterTextChanged(Editable s)
            {
                adapter.getFilter().filter(s);
            }
        });
    
        dialog_data.show();
    }
    
    /*** custom_alertdialog.xml ***/
    
      <?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/alertdialog_linearlayout"
       android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:background="@null">
    
      <LinearLayout
      android:layout_height="wrap_content"
      android:layout_width="match_parent"
      android:orientation="vertical"
      android:layout_marginTop="@dimen/dimen_20dp"
      android:background="@color/white">
    
      <TextView
          android:id="@+id/alertdialog_textview"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/select_state"
          android:textColor="@color/black"
          android:textSize="@dimen/text_size_16sp"
          android:layout_marginTop="@dimen/dimen_20dp"
          android:layout_marginLeft="@dimen/dimen_20dp"
          android:layout_marginStart="@dimen/dimen_20dp"
          android:layout_marginRight="@dimen/dimen_20dp"
          android:layout_marginEnd="@dimen/dimen_20dp"
          android:gravity="center"
          android:drawableLeft="@drawable/ic_launcher"
          android:drawableStart="@drawable/ic_launcher"
          android:drawablePadding="@dimen/dimen_10dp"/>
    
      <EditText
          android:id="@+id/alertdialog_edittext"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:ellipsize="end"
          android:textStyle="normal"
          android:textColorHint="@color/edittext_hint_color"
          android:textColor="@color/edit_profile_text_color"
          android:layout_marginLeft="@dimen/dimen_20dp"
          android:layout_marginStart="@dimen/dimen_20dp"
          android:layout_marginRight="@dimen/dimen_20dp"
          android:layout_marginEnd="@dimen/dimen_20dp"
          android:layout_marginTop="@dimen/dimen_10dp"
          android:layout_marginBottom="@dimen/dimen_10dp"
          android:maxLines="1"
          android:textCursorDrawable="@null"
          android:gravity="start"
          android:inputType="text"
          android:theme="@style/alertdialog_edittextTheme"
          android:layout_gravity="start" />
    
      <ListView
          android:id="@+id/alertdialog_Listview"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout_marginLeft="@dimen/dimen_20dp"
          android:layout_marginStart="@dimen/dimen_20dp"
          android:layout_marginRight="@dimen/dimen_20dp"
          android:layout_marginEnd="@dimen/dimen_20dp"
          android:choiceMode="singleChoice"/>
    
      </LinearLayout>
    
       <Button
        android:id="@+id/dialog_cancel_btn"
        android:layout_width="@dimen/dimen_30dp"
        android:layout_height="@dimen/dimen_30dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:text="@string/X"
        android:textColor="@color/black"
        android:gravity="center"
        android:layout_alignParentTop="true"
        android:layout_marginRight="@dimen/dimen_10dp"
        android:layout_marginEnd="@dimen/dimen_10dp"
        android:layout_marginTop="@dimen/dimen_5dp"
        android:background="@drawable/round_button"/>
    
       </RelativeLayout>
    
    
        /**round_button**/
    
      <?xml version="1.0" encoding="utf-8"?>
     <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="oval"
    android:thicknessRatio="1.9"
    android:useLevel="false" >
    
    <solid android:color="@android:color/white" />
    
    <size android:width="100dp"
        android:height="100dp"/>
    
    <stroke android:width="1dp"
        android:color="@color/black"/>