onItemSelected方法帮助 - 加载一个Intent

时间:2014-04-02 19:18:32

标签: android

我尝试过谷歌搜索,但无法得到针对我的问题的答案。

我正在尝试在单击项目时启动活动。代码如下:

public class ListOfCircuits extends Activity
{
String[] raceTrackList;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_of_circuits);

    raceTrackList = getResources().getStringArray(R.array.tracklist_array);

    Spinner s1 = (Spinner) findViewById(R.id.circuitListSpinner);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, raceTrackList);

    s1.setAdapter(adapter);
    s1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0,
        View arg1, int arg2, long arg3)
        {
            int index = arg0.getSelectedItemPosition();
            Toast.makeText(getBaseContext(),
                "You have selected: " + raceTrackList[index],
                Toast.LENGTH_SHORT).show();

            String intentString;

            String circuitChosen = raceTrackList[index].toString();
            intentString = ("net.learn2develop." + circuitChosen);

            startActivity(new Intent(intentString));
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0)
        {

        }
    });
}

然而,此刻它直接加载到列表顶部的活动(TopGear)。你如何解决这个问题,以便用户可以看到列表并选择它,即不立即启动意图 - 使用if语句?

感谢。

3 个答案:

答案 0 :(得分:0)

这是因为该方法是在Activity第一次加载时调用的。 是处理此问题的更好方法,但您只需设置boolean标记

public class ListOfCircuits extends Activity
{
    String[] raceTrackList;
    boolean go = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {

然后在第一次调用它时将其设置为true并在那里检查

    @Override
    public void onItemSelected(AdapterView<?> arg0,
    View arg1, int arg2, long arg3)
    {
        if (go)
        {
             // your code
            intentString = ("net.learn2develop." + circuitChosen);
            startActivity(new Intent(intentString));
        }
        else
        {    go = true;    }
    }

答案 1 :(得分:0)

我的回答是:

添加布尔值作为codeMagic建议并将我的数组修改为:

<string-array name="tracklist_array">
    <item>Choose from below:</item>
    <item>TopGear</item>
    <item>Snetterton</item>
    <item>Silverstone</item>
    <item>Donnington</item>
</string-array>

<string-array name="tracklist_array">
    <item>TopGear</item>
    <item>Snetterton</item>
    <item>Silverstone</item>
    <item>Donnington</item>
</string-array>

最终代码是针对Java的 - 见下文。 再次感谢。

答案 2 :(得分:0)

CodeMagic认为我现在让它像老板一样工作:

@Override
        public void onItemSelected(AdapterView<?> arg0,
        View arg1, int arg2, long arg3)
        {
            if(go)
            {
                int index = arg0.getSelectedItemPosition();
                if(index == 0)
                {
                    Toast.makeText(getBaseContext(),
                        "Please select a race crcuit.",
                        Toast.LENGTH_SHORT).show(); 
                }
                else
                {
                    Toast.makeText(getBaseContext(),
                        "You have selected: " + raceTrackList[index],
                        Toast.LENGTH_SHORT).show();

                    String intentString;

                    String circuitChosen = raceTrackList[index].toString();
                    intentString = ("net.learn2develop." + circuitChosen);

                    startActivity(new Intent(intentString));
                }
            }
            else
            {
                go = true;
            }
        }

我只加载我想要的Intents(竞赛电路),如果用户选择“从下面选择:”,只会显示一个相关的Toast。

感谢。