取消按钮不起作用AlertDialod Android

时间:2017-07-10 12:45:43

标签: android listview alertdialog android-alertdialog cancel-button

在我的应用程序中,我创建了一个Alertdialog,其中包含Title,listview项和Cancel按钮。我已经在列表的每个项目上设置了项目单击。因此,如果用户点击项目,它将生成另一个带有标题,列表视图和取消的Alertdialog。第一个Alerdialog的取消按钮工作正常。但第二个Alerdialog的取消按钮无法正常工作。我不知道背后的原因是什么。我已经实现了类似的代码。这是我的代码。

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>

Second Alert的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 个答案:

答案 0 :(得分:0)

/**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"/>

答案 1 :(得分:0)

由于我的声誉,我必须将此作为答案发布而不是评论。但是,AlertDialog是否包含列表视图? 所以在你的AlertDialog中,你会有

标题
LISTVIEW
取消

如果是这种情况,我会在此帖子中编辑解决方案。你的代码非常古怪......所以我认为最好的选择是从头开始。

使用以下代码编辑

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