1

嘿伙计们,我几天前刚开始制作 Android 应用程序,我试图用另一个微调器更新一个微调器信息。在您开始讨厌之前,我已经检查了其他答案并尝试了所有答案,但由于某种原因没有任何效果!它应该从一个 xml 字符串文件中获取一个数组并用我不知道我是否在我的代码中犯了错误或其他什么东西填充微调器,但它似乎不起作用。这是不起作用的代码部分:

public class NextBusesActivity extends Activity {

private Spinner spinnerRoutes;
private Spinner spinnerStops;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next_buses);

    spinnerStops = (Spinner)findViewById(R.id.nextBusStopsSpinner);
    spinnerRoutes = (Spinner)findViewById(R.id.nextBusRoutesSpinner);


    spinnerRoutes.setOnItemSelectedListener(spinnerBusRouteHandler);
}


private OnItemSelectedListener spinnerBusRouteHandler= new OnItemSelectedListener(){

    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        Log.d(MainActivity.DEBUGTAG, "Made it into the listener");

        //if (parent.getItemAtPosition(pos).toString().contains("Trent")){

            Log.d(MainActivity.DEBUGTAG, "Made it to Trent west bank     choice");
            ArrayAdapter<CharSequence> adapter =     ArrayAdapter.createFromResource(getApplicationContext(), 
                    R.array.westbank_stops,     android.R.layout.simple_spinner_item);
                     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

            spinnerStops.setAdapter(adapter);

            Log.d(MainActivity.DEBUGTAG, "Spinner refill worked     westbank");
        //}

    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_next_buses, menu);
    return true;
}
}

谢谢你们的帮助。

4

1 回答 1

1

您的问题不在上面的代码中。您可能正在尝试在 onCreate 中手动设置第一个微调器的选择,并期望 ItemSelectListener 能够完成它的工作。好吧,事实并非如此。监听器只有在 onCreate 代码完全执行后才会激活。

所以如果你这样做:

@Override
public void onCreate(Bundle savedInstanceState) {
...
spinnerRoutes.setOnItemSelectedListener(spinnerBusRouteHandler);
spinnerRoutes.setSelected(someSpinnerPosition, true);

// some other code that involves the second spinner

}

当您执行 setSelected 时,不要期望监听器会被完全触发,因为它不会。它将执行所有 onCreate 代码,甚至是“// 一些涉及第二个微调器的其他代码”,只有在此之后,侦听器才会激活并被触发。

我自己遇到了这个问题,我必须找到解决方法。非常烦人。

于 2014-12-12T02:59:23.747 回答