在多个活动中使用微调器作为菜单

时间:2014-08-31 00:07:02

标签: java android spinner

我的问题如下:我有一个微调器作为我的mainactivity中的菜单,我也想在我的其他活动中使用相同的微调器,所以我可以保存一些代码行。我怎么能实现这一目标?我会发布代码,还是有更好的解决方案来做到这一点?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Spinner spinner = (Spinner) findViewById(R.id.comboCasino);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.comboCasino, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        // this will be called when you select any item in this spinner
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) {
                // get the text at that position
                String Text = spinner.getSelectedItem().toString();
                if(Text.equals("Wien Simmering")) {
                    Intent NewPost = new Intent(StartingPoint.this,Simmering.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Wien Lugner City")) {
                    Intent NewPost = new Intent(StartingPoint.this, LugnerCity.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Gmunden")) {
                    Intent NewPost = new Intent(StartingPoint.this, Gmunden.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Salzburg")) {
                    Intent NewPost = new Intent(StartingPoint.this, Salzburg.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Linz")) {
                    Intent NewPost = new Intent(StartingPoint.this, Linz.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Saalbach")) {
                    Intent NewPost = new Intent(StartingPoint.this, Saalbach.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Innsbruck")) {
                    Intent NewPost = new Intent(StartingPoint.this, Innsbruck.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Reutte")) {
                    Intent NewPost = new Intent(StartingPoint.this, Reutte.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Bregenz")) {
                    Intent NewPost = new Intent(StartingPoint.this, Bregenz.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Kufstein")) {
                    Intent NewPost = new Intent(StartingPoint.this, Kufstein.class);
                    startActivity(NewPost);
                }
                if(Text.equals("Bratislava")) {
                    Intent NewPost = new Intent(StartingPoint.this, Bratislava.class);
                    startActivity(NewPost);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub  
            }
        });
    }   

这里是xml

 <string-array name="comboCasino">
        <item>Filiale</item>
        <item>Wien Simmering</item>
        <item>Wien Lugner City</item>
        <item>Gmunden</item>
        <item>Salzburg</item>
        <item>Linz</item>
        <item>Saalbach</item>
        <item>Innsbruck</item>
        <item>Reutte</item>
        <item>Bregenz</item>
        <item>Kufstein</item>
        <item>Bratislava</item>
    </string-array>

2 个答案:

答案 0 :(得分:1)

我可以想到几个可能的解决方案:

  1. 将您的微调器添加到ActionBar

  2. 为您的所有活动创建基类。此基类包含Spinner

  3. 的初始化代码
  4. 使用适当的逻辑创建自定义组件。将此组件添加到需要该菜单的每个活动。

答案 1 :(得分:0)

你做得对。实际的初始化并不是那么糟糕,因为你只是声明Spinner,制作适配器,并应用xml属性(如果用代码制作它们,则不需要它们) ),然后你给它一个适配器。您的问题是OnItemSelectedListener中的冗长代码。

您的初始化权限正确,我只需将if更改为switch,就像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final Spinner spinner = (Spinner) findViewById(R.id.comboCasino);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.comboCasino, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    // this will be called when you select any item in this spinner
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) {
            // get the text at that position
            String Text = spinner.getSelectedItem().toString();
                switch(position) {
                    case 0:
                        Intent NewPost = new Intent(StartingPoint.this, Simmering.class);
                        startActivity(NewPost);
                    case 1:
                        Intent NewPost = new Intent(StartingPoint.this, LugnerCity.class);
                        startActivity(NewPost);
                    case 2:
                        Intent NewPost = new Intent(StartingPoint.this, WhateverTown.class);
                        startActivity(NewPost);
                        .
                        .
                        .
                    case 10:
                        ...........
                        ......
                } 
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub  
        }
    });
}   

自动传递给名为OnItemSelectedListener的{​​{1}}的int标记了所单击列表上的位置,因此您可以使用此代替许多position语句。