Spinner 出现问题:尝试完成输入事件,但输入事件接收器已被处理

Trouble with Spinner: Attempted to finish an input event but the input event receiver has already been disposed

正如标题所说,我在与 Spinner 交互时遇到此错误。我注意到有很多关于这个论点的 post,但每一个都各不相同(答案也是如此)。不幸的是,我没有找到解决方案,所以我在这里问。

这是 Spinner 的屏幕截图:

如您所见,第一个 Spinner 没问题,但第二个有两个问题:

也许这两件事有某种联系...

代码如下:

public class Settings extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.settings);

    Integer[] radiusArray = new Integer[]{500,700,1000,1500,2000,2500,3000,4000,5000};
    Integer[] geofenceRadius = new Integer[]{100,200,300,400,500};

    try {

        final Spinner spinnerRA = (Spinner) findViewById(R.id.search_radius);
        final Spinner spinnerGR = (Spinner) findViewById(R.id.geofence_radius);

        ArrayAdapter<Integer> adapterRA = new ArrayAdapter<Integer>(this,android.R.layout.simple_spinner_item, radiusArray);
        spinnerRA.setAdapter(adapterRA);

        ArrayAdapter<Integer> adapterGR = new ArrayAdapter<Integer>(this,android.R.layout.simple_spinner_item, geofenceRadius);
        spinnerRA.setAdapter(adapterGR);

        //Getting from preference files, saved settings, if any
        //1000 and 100 are default settings
        final SharedPreferences sharedPref = getSharedPreferences("Settings",Context.MODE_PRIVATE);
        String temp = getResources().getString(R.string.search_radius);
        int savedRadius  = sharedPref.getInt(temp, 1000);
        temp = getResources().getString(R.string.geofence_radius);
        int savedGeofence = sharedPref.getInt(temp, 100);

        //Show selected value for spinner, or default value
        int i;
        for(i=0; i<radiusArray.length; i++){
            if(radiusArray[i].equals(savedRadius)){
                break;
            }
        }
        spinnerRA.setSelection(i);

        for(i=0; i<geofenceRadius.length; i++){
            if(geofenceRadius[i].equals(savedGeofence)){
                break;
            }
        }
        spinnerGR.setSelection(i);

        Button Save = (Button) findViewById(R.id.save_settings_button);

        Save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Integer searchRadius = (Integer)spinnerRA.getSelectedItem();
                Integer geofenceRadius = (Integer)spinnerGR.getSelectedItem();


                //Saving new value of search_radius
                SharedPreferences.Editor editor = sharedPref.edit();
                editor.putInt(getString(R.string.search_radius),searchRadius);
                editor.putInt(getString(R.string.geofence_radius),geofenceRadius);

                editor.putBoolean(getString(R.string.initialized),true);
                editor.commit();

                CharSequence text = "Changes saved succesfully!";
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(getApplicationContext(), text, duration);
                toast.show();
            }


        });

    }catch (Exception e){
        e.printStackTrace();
    }
}

}

这里是 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Settings"
        android:textSize="14pt"
        android:layout_marginTop="8pt"
        android:gravity="center"/>

    <View android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="5pt"
        android:id="@+id/second_gray_line"
        android:background="@android:color/darker_gray"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="10pt">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="Initial search radius (in meters):"
            android:textColor="#FF8500"
            android:layout_marginLeft="10pt"
            android:layout_marginTop="15pt"
            android:textSize="11pt"/>

        <Spinner
            android:layout_width="60pt"
            android:layout_height="wrap_content"
            android:id="@+id/search_radius"
            android:layout_marginTop="5pt"
            android:layout_marginLeft="5pt">
        </Spinner>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="10pt">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="Location radius (in meters):"
            android:textColor="#FF8500"
            android:layout_marginLeft="10pt"
            android:layout_marginTop="15pt"
            android:textSize="11pt"/>

        <Spinner
            android:layout_width="60pt"
            android:layout_height="wrap_content"
            android:id="@+id/geofence_radius"
            android:layout_marginTop="5pt"
            android:layout_marginLeft="5pt">
        </Spinner>

    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/save_settings_button"
        android:text="Save Settings"
        android:textSize="10pt"
        android:layout_gravity="center"
        android:layout_marginTop="50pt"/>

</LinearLayout>

我认为这是一个非常愚蠢的错误,但我不知道是什么原因造成的。你可以帮帮我吗?谢谢!

我解决了,正如我所说,这个错误真的很愚蠢......我在这里犯了一个错误,在第二个适配器中:

ArrayAdapter<Integer> adapterGR = new ArrayAdapter<Integer>(this,android.R.layout.simple_spinner_item, geofenceRadius);
    spinnerRA.setAdapter(adapterGR);

这必须在以下时间更改:

ArrayAdapter<Integer> adapterGR = new ArrayAdapter<Integer>(this,android.R.layout.simple_spinner_item, geofenceRadius);
    spinnerGR.setAdapter(adapterGR);

这只是一个疏忽。我使用 spinnerRA 而不是 spinnerGR 来设置第二个适配器。现在可以使用了!