0

我有一个 Spinner,我在其中显示一个列表。现在我想在自定义对话框中显示该列表,该对话框在选择列表视图项时具有 listview。Spinner 值将是从 listview 项中选择的值。

这是我的微调器

<Spinner
    android:id="@+id/Tittle"
    android:layout_width="290dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="5dp"
    android:visibility="gone"
    android:layout_height="wrap_content"/>

这就是我在微调器中设置值的方式

public void setTittle() {
        String[] tittlearray = { "Mr.", "Mrs.", "Ms" };
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, tittlearray);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        tittleSpinner.setAdapter(dataAdapter);
    }

这是我的列表视图

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

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


</RelativeLayout>

现在我想要自定义对话框中的这个列表。请帮助我得到这个。

使用 Gaurav 代码后编辑

Exception i am getting 
09-12 13:46:04.436: E/InputEventReceiver(7206): Exception dispatching input event.
09-12 13:46:04.437: E/MessageQueue-JNI(7206): Exception in MessageQueue callback: handleReceiveCallback
09-12 13:46:04.469: E/MessageQueue-JNI(7206): java.lang.NullPointerException
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.example.bookingpage.MainActivity$5.onTouch(MainActivity.java:215)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.View.dispatchTouchEvent(View.java:7138)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2238)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1935)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1938)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1392)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.app.Activity.dispatchTouchEvent(Activity.java:2408)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1886)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.View.dispatchPointerEvent(View.java:7323)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3520)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3454)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4543)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4522)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4618)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.os.MessageQueue.nativePollOnce(Native Method)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.os.MessageQueue.next(MessageQueue.java:125)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.os.Looper.loop(Looper.java:140)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at android.app.ActivityThread.main(ActivityThread.java:4987)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at java.lang.reflect.Method.invokeNative(Native Method)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at java.lang.reflect.Method.invoke(Method.java:511)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
09-12 13:46:04.469: E/MessageQueue-JNI(7206):   at dalvik.system.NativeStart.main(Native Method)
09-12 13:46:04.470: D/AndroidRuntime(7206): Shutting down VM
09-12 13:46:04.470: W/dalvikvm(7206): threadid=1: thread exiting with uncaught exception (group=0x40de8908)
09-12 13:46:04.493: E/AndroidRuntime(7206): FATAL EXCEPTION: main
09-12 13:46:04.493: E/AndroidRuntime(7206): java.lang.NullPointerException
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.example.bookingpage.MainActivity$5.onTouch(MainActivity.java:215)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.View.dispatchTouchEvent(View.java:7138)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2238)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1935)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2244)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1907)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1938)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1392)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.app.Activity.dispatchTouchEvent(Activity.java:2408)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1886)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.View.dispatchPointerEvent(View.java:7323)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3520)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3454)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4543)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4522)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4618)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.os.MessageQueue.nativePollOnce(Native Method)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.os.MessageQueue.next(MessageQueue.java:125)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.os.Looper.loop(Looper.java:140)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at android.app.ActivityThread.main(ActivityThread.java:4987)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at java.lang.reflect.Method.invokeNative(Native Method)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at java.lang.reflect.Method.invoke(Method.java:511)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
09-12 13:46:04.493: E/AndroidRuntime(7206):     at dalvik.system.NativeStart.main(Native Method)
4

2 回答 2

0

制作一个 customAlert 类

     public class CustomAlertDialog extends Dialog implements OnClickListener{

private Button mBtnPositive;
private Button mBtnNegative;

private TextView mTvTitle;
private TextView mTvMessage;

private OnClickListener dialogPositiveButtonClickListener;
private OnClickListener dialogNegativeButtonClickListener;

private Context mContext;

// For SingleChoice Mode dialog
private LinearLayout llButtonsContainer;


public CustomAlertDialog(Context context) {
    super(context);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.custom_alert_dialog);

    this.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

    mContext = context;

    mBtnPositive = (Button) findViewById(R.id.alert_button_positive);
    mBtnNegative = (Button) findViewById(R.id.alert_button_negative);

    mTvTitle = (TextView) findViewById(R.id.alert_title);
    mTvMessage = (TextView) findViewById(R.id.alert_message);

    mBtnPositive.setOnClickListener(this);
    mBtnNegative.setOnClickListener(this);
  }

     public static CustomAlertDialog createAlertDialog (Context context, String title ,  OnDismissListener dismissListener) {

    CustomAlertDialog alertDialog = new CustomAlertDialog(context);
    alertDialog.setTitle(title);
    alertDialog.setOnDismissListener(dismissListener);
    alertDialog.setButton("OK", new OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
              dialog.dismiss();
        } });
    return alertDialog;
}   
   }

和你的 custom_alert_dialog.xml

   <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_margin="20dip"
      android:gravity="center"
      android:orientation="vertical" >

<Spinner
android:id="@+id/Tittle"
android:layout_width="290dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:visibility="gone"
android:layout_height="wrap_content"/>

</LinearLayout>

我没有把所有的按钮和所有东西都放在这里。这只是给你一个想法。

然后在你的 activity.class

     CustomAlertDialog alert = CustomAlertDialog.createAlertDialog(this, "" + "", null, "OK", null, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    logOut();
                }
            });
            alert.show();

同样,我没有粘贴整个代码。希望这对你有帮助:)

于 2013-09-12T07:55:59.867 回答
0

现在有你的功能它不会显示任何错误。我已经检查过它工作正常

   private void setTittleValue() {
        tittleSpinner.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                if(arg1.getAction()==MotionEvent.ACTION_UP){
                    final String[] tittlearray = { "Mr.", "Mrs.", "Ms" };
                    final Dialog dialog= new Dialog(MainActivity.this);
                    dialog.setContentView(R.layout.tittle_list); // Custom layout XML for pre-confirmation on selection 
                    dialog.setTitle("Select tittle...");
                    final ListView listView = (ListView) dialog.findViewById(R.id.listview);
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                            android.R.layout.simple_list_item_1, android.R.id.text1, tittlearray);
                    listView.setAdapter(adapter); 
                    listView.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
                            dialog.dismiss();
                            String  itemValue    = (String) listView.getItemAtPosition(position);
                            tittleSpinner.setSelection(Arrays.asList(tittlearray).indexOf(itemValue));
                        }

                    }); 
                    dialog.show();
                    return true;
                }
                return false;
            }
        });

    }

列表视图 xml

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

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


</RelativeLayout>
于 2013-09-12T08:13:52.910 回答