【问题标题】:How to get String from setOnItemSelectedListener method?如何从 setOnItemSelectedListener 方法获取字符串?
【发布时间】:2016-03-21 12:39:09
【问题描述】:

我是 Android 新手,我正在尝试从微调器获取字符串。我做了一些研究,但我找不到任何有用的东西。无需尝试获取 String 代码即可正常工作。这是正在运行的代码:

assert staticSpinner2 != null;
    staticSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String spinnerLanguage2 = staticSpinner2.getSelectedItem().toString();

        }

        public String getSpin(String spinnerLanguage2) {
            return spinnerLanguage2;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

我尝试使用如下 getter 方法,但没有收到任何错误:

assert staticSpinner2 != null;
    staticSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String spinnerLanguage2 = staticSpinner2.getSelectedItem().toString();

        }

        public String getSpinnerString(String spinnerLanguage2) {
            return spinnerLanguage2;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

我正在尝试使用以下方法将此字符串设置为文本视图:

assert staticSpinner2 != null;
    staticSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String spinnerLanguage2 = staticSpinner2.getSelectedItem().toString();

        }

        public String getSpinnerString(String spinnerLanguage2) {
            return spinnerLanguage2;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    MainActivityClassName AnObject = new MainActivityClassName();
    text.setText(AnObject.getSpinnerString());

我收到一条错误消息“无法解析方法 getSpin()”。我确实意识到我没有将任何参数传递给该方法,但我不知道我该怎么做。我感谢以不同方式解决问题的任何帮助或任何其他建议。提前致谢。

如果有帮助,这是完整的代码:

public class MainActivity extends AppCompatActivity {

TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_json);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    text = (TextView) findViewById(R.id.textView);

    // spinner 1
    final Spinner staticSpinner1 = (Spinner) findViewById(R.id.spinner1);

    // Create an ArrayAdapter using the string array and a default spinner
    ArrayAdapter<CharSequence> staticAdapter1 = ArrayAdapter
            .createFromResource(this, R.array.lang,
                    android.R.layout.simple_spinner_item);

    // Specify the layout to use when the list of choices appears
    staticAdapter1
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // Apply the adapter to the spinner
    staticSpinner1.setAdapter(staticAdapter1);



    // spinner 2
    final Spinner staticSpinner2 = (Spinner) findViewById(R.id.spinner2);

    staticSpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {


        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                   int arg2, long arg3) {
            String spinnerLanguage = staticSpinner1.getSelectedItem().toString();


            switch (spinnerLanguage) {
                case "Afrikaans":
                    // Create an ArrayAdapter using the string array and a default spinner
                    ArrayAdapter<CharSequence> staticAdapterAF = ArrayAdapter
                            .createFromResource(getBaseContext(), R.array.af,
                                    android.R.layout.simple_spinner_item);

                    // Specify the layout to use when the list of choices appears
                    staticAdapterAF
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    // Apply the adapter to the spinner
                    staticSpinner2.setAdapter(staticAdapterAF);
                    break;
                case "French":
                    // Create an ArrayAdapter using the string array and a default spinner
                    ArrayAdapter<CharSequence> staticAdapterFR = ArrayAdapter
                            .createFromResource(getBaseContext(), R.array.fr,
                                    android.R.layout.simple_spinner_item);

                    // Specify the layout to use when the list of choices appears
                    staticAdapterFR
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    // Apply the adapter to the spinner
                    staticSpinner2.setAdapter(staticAdapterFR);
                    break;
                case "English":
                    // Create an ArrayAdapter using the string array and a default spinner
                    ArrayAdapter<CharSequence> staticAdapterEN = ArrayAdapter
                            .createFromResource(getBaseContext(), R.array.en,
                                    android.R.layout.simple_spinner_item);

                    // Specify the layout to use when the list of choices appears
                    staticAdapterEN
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    // Apply the adapter to the spinner
                    staticSpinner2.setAdapter(staticAdapterEN);
                    break;
                case "Turkish":
                    // Create an ArrayAdapter using the string array and a default spinner
                    ArrayAdapter<CharSequence> staticAdapterTR = ArrayAdapter
                            .createFromResource(getBaseContext(), R.array.tr,
                                    android.R.layout.simple_spinner_item);

                    // Specify the layout to use when the list of choices appears
                    staticAdapterTR
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    // Apply the adapter to the spinner
                    staticSpinner2.setAdapter(staticAdapterTR);
                    break;
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }

    });


    assert staticSpinner2 != null;
    staticSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String spinnerLanguage2 = staticSpinner2.getSelectedItem().toString();


        }

        public String getSpin(String spinnerLanguage2) {
            return spinnerLanguage2;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    MainActivity AnObject = new MainActivity();
    text.setText(AnObject.getSpinnerString());

}

}

【问题讨论】:

  • 在 onItemSelected 中试试这个 parent.getItemAtPosition(position) 更多信息请参考这里:- coderzpassion.com/android-working-with-spinner
  • 它产生了同样的错误。我找到了这样的教程。但是,它们都在 onItemSelected 方法中完成它们的任务。我需要做的是从方法中提取字符串。
  • 将此值传递给方法然后做你想做的事
  • 我将把它放在一个 url 中以执行 google 搜索。
  • 试一试,否则搜索您面临的问题,如果没有找到,请在此处发布

标签: java android textview android-spinner android-button


【解决方案1】:

你可以这样做:

String selectedText = null;

staticSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        selectedText = parent.getItemAtPosition(position).toString();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

现在您可以使用selectedText 变量传递给您想要的任何方法。但是请记住,除非您在微调器中选择某些内容,否则它的值将是 null

【讨论】:

  • 当我这样做时,Android Studio 强迫我将 selectedText 设为最终的 String 数组。我试过了,我没有收到任何错误,但 TextView 已经消失了。
  • 你能发布你的完整代码吗? TextView 是从哪里来的?
  • MainActivityClassName 是什么?
  • 对不起,我的意思是 MainActivity,但仍然出现同样的错误。
  • 为什么在MainActivity 中需要MainActivity 的对象?我无法理解您的工作流程。启动此活动时,您希望的行为是什么。
【解决方案2】:

如果你真的必须在外部使用它,你可以这样做:

 public void setTextView(String text){
        text.setText(text);
 }

并在您的 onItemSelected 中调用此方法:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
     setTextView(staticSpinner2.getSelectedItem().toString());
}

【讨论】:

  • 这工作正常,但我真正需要做的是从 onItemSelected 方法中提取字符串,然后将其传递给另一个主类方法。为了简单起见,我在这里添加了 setText。
  • 调用像 setTextView 这样的外部方法是一种提取字符串的方法。在 setTextView 中,您处于 MainClass 范围内,然后,您可以将 String 传递给您想要的任何类。
【解决方案3】:

阅读了这段代码后,为什么不将“spinnerLanguage2”提取到您的主类中,然后从那里访问它呢?在 OnItemSelected 方法中赋值。

编辑: 我之前的回答是错误的。尝试实现一个接口以便与其他类进行通信。因此,调用该接口的方法可以传递值。我给你一个链接(它解释了它的片段,但你也可以交流你的课程):

http://developer.android.com/intl/es/training/basics/fragments/communicating.html

【讨论】:

  • 你能否提供一些代码来证明你的答案。
  • 对不起,我看错了,忘记上一个答案了。也许在 OnItemSelected 方法中设置文本将是解决方案,因此您可以在微调器更改时控制文本视图。
  • 我知道我可以在 onItemSelected 方法中设置文本。我真正需要做的是在方法之外提取字符串。为了简单起见,我在这里使用了 setText。
  • 我不知道你在单独的课堂上使用它,看看我编辑的评论。
猜你喜欢
  • 2014-05-27
  • 2016-07-30
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多