Android alert.dialog中的微调器崩溃

Android alert.dialog中的微调器崩溃,android,android-spinner,android-alertdialog,Android,Android Spinner,Android Alertdialog,我有一个警报对话框,其中有一个微调器: LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inf.inflate(R.layout.change_bike_state, null); AlertDialog.Builder changeState = new AlertDialog.Builder(activity); c

我有一个警报对话框,其中有一个微调器:

LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inf.inflate(R.layout.change_bike_state, null);

AlertDialog.Builder changeState = new AlertDialog.Builder(activity);

changeState.setTitle(bikeName + " " + stateName);
changeState.setView(layout);

String state_data[] = new String[3];

state_data[0]="Alquilada";
state_data[1]="No alquilada";
state_data[2]="Mantenimiento";

Spinner states = (Spinner) layout.findViewById(R.id.bike_states);

ArrayAdapter adapter = new ArrayAdapter(activity,android.R.layout.simple_spinner_item, state_data);

states.setAdapter(adapter);

   //positive and negative button

    changeState.show();
更改\u bike\u state.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:orientation="vertical" >

<Spinner
    android:id="@+id/bike_states"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

如何解决此问题?

警报对话框中传递活动上下文
而不是
活动
。您的对话框无法找到它应该显示在哪个活动上下文中。因此,请尝试以下方法:

View layout = inf.inflate(R.layout.change_bike_state, (ViewGroup)getCurrentFocus());
试试这个

 LayoutInflater inf = (LayoutInflater)  context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View layout = inf.inflate(R.layout.change_bike_state, null);

 AlertDialog.Builder changeState = new AlertDialog.Builder(YourActivity.this);

 changeState.setTitle(bikeName + " " + stateName);
 changeState.setView(layout);

 String state_data[] = new String[3];

  state_data[0]="Alquilada";
 state_data[1]="No alquilada";
 state_data[2]="Mantenimiento";

Spinner states = (Spinner) layout.findViewById(R.id.bike_states);

ArrayAdapter adapter = new ArrayAdapter(activity,android.R.layout.simple_spinner_item,     state_data);

 states.setAdapter(adapter);

   //positive and negative button

 AlertDialog alert = changeState.create();

  alert.show();

使用此方法对AlertDialog的布局进行充气

  View layout = inf.inflate(R.layout.change_bike_state, null, true);
而不是

  View layout = inf.inflate(R.layout.change_bike_state, null);

arrayAdapter中上下文的值是什么?让你放置changeState.create();在调用changeState.show()之前;试过了,还是崩溃了!使用此代码时,警报不会显示,当尝试显示我已更新答案时,警报会崩溃。我已经检查并测试了它,它的工作非常棒。试试我的代码。你需要传递你活动的背景,而不是活动。我也有同样的行为,我无法理解!我只更改上下文活动,因为上下文崩溃(未显示警报)会引发异常:java.lang.UnsupportedOperationException:AdapterView中不支持addView(视图,LayoutParams)
  View layout = inf.inflate(R.layout.change_bike_state, null, true);
  View layout = inf.inflate(R.layout.change_bike_state, null);