2

Я новичок в Android, и я пытаюсь получить String из spinner. Я сделал некоторые исследования, но я не мог найти ничего полезного. Не пытаясь получить String, код работает правильно. Это код, который работает:Как получить String из метода setOnItemSelectedListener?

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) { 

     } 
    }); 

Я пытался использовать метод получения следующим образом, где я не получил каких-либо ошибок:

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()); 

} 

}

+0

Попробуйте этот parent.getItemAtPosition (position) in onItemSelected Подробнее см. Здесь: - http://coderzpassion.com/android-working-with-spinner/ –

+0

Произошла такая же ошибка. Я нашел учебники, подобные этому. Однако все они выполняют свои задачи внутри метода onItemSelected. Мне нужно извлечь строку из метода. –

+0

передайте это значение методу, а затем сделайте то, что хотите сделать –

ответ

3

Вы можете сделать это:

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.

+0

Когда я это сделал, Android Studio заставил меня сделать selectedText окончательным массивом String. Я попробовал это, я не знаю никаких ошибок, но TextView исчез. –

+0

Можете ли вы разместить свой полный код? Откуда появился TextView? –

+0

Я отправил полный код. –

2

Прочитав этот кусок кода, почему бы не извлечь «spinnerLanguage2» к главному классу, а затем получить доступ к нему из там? Назначение значения внутри метода OnItemSelected.

EDIT: Мой предыдущий ответ неправильный. Попробуйте реализовать интерфейс для связи с другим классом. Таким образом, вызывая метод этого интерфейса, вы можете передать значение. Я дам вам ссылку с этим (Это объясняет его фрагменты, но года могут общаться классами тоже):

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

+0

Не могли бы вы предоставить некоторый код, чтобы оправдать ваш ответ. –

+0

Извините, я прочитал это неправильно, забудьте предыдущий ответ. Возможно, настройка текста внутри метода OnItemSelected будет решением, таким образом вы можете контролировать текстовое представление всякий раз, когда изменяется spinner. – kikettas

+0

Я знаю, что могу установить текст внутри метода onItemSelected. То, что мне действительно нужно сделать, это извлечь строку вне метода.Для удобства я использовал setText. –

3

Если вы действительно должны использовать его внешним, вы можете сделать это:

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()); 
} 
+0

Это работает нормально, но мне действительно нужно сделать это, чтобы извлечь строку из метода onItemSelected, после чего я передам ее другому методу основного класса. Я добавил setText здесь для простоты. –

+0

Вызов внешнего метода, такого как setTextView, - способ извлечь вашу строку. Внутри setTextView вы находитесь в области MainClass, а затем вы можете передать свою String в любой класс, который вы хотите. –

Смежные вопросы