Как подключить выбор элементов-счетчиков к активности?

У меня есть приложение, в котором есть вертушка в верхней части макета, а также некоторые текстовые поля под ним и кнопка внизу с именем «РЕЗУЛЬТАТ». В spinner я поместил имя разных формул, которые при выборе должны действовать на номера в текстовом поле и когда нажата кнопка RESULT, должен отображаться новый макет с результатом. На данный момент я создал активность для каждой формулы в spinner. Я не знаю, как соединить выбор формулы спиннера с активностью формулы. Будучи новичком, я искал все возможные решения здесь, но не смог его найти. Может ли кто-нибудь помочь мне с куском кода.


Я применил решение, как показано ниже

protected void onCreate(Bundle savedInstanceState) {
   //TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.selective);
final Class[] clazz={Srkt.class,Binkhorst.class,Srk2.class,Holladay.class};
spin=(Spinner)findViewById(R.id.formulae);
spin.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
       //TODO Auto-generated method stub
        Intent i=new Intent(Selection.this,clazz[pos]);
        startActivity(i);

    }

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

    }
    });

logcat показывает следующие ошибки

    12-28 15:17:41.336: E/Trace(768): error opening trace file: No such file or directory (2)
12-28 15:17:44.554: E/AndroidRuntime(768): FATAL EXCEPTION: main
12-28 15:17:44.554: E/AndroidRuntime(768): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.iolcalci/com.example.iolcalci.Srkt}: java.lang.NullPointerException
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.os.Looper.loop(Looper.java:137)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread.main(ActivityThread.java:5039)
12-28 15:17:44.554: E/AndroidRuntime(768):  at java.lang.reflect.Method.invokeNative(Native Method)
12-28 15:17:44.554: E/AndroidRuntime(768):  at java.lang.reflect.Method.invoke(Method.java:511)
12-28 15:17:44.554: E/AndroidRuntime(768):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-28 15:17:44.554: E/AndroidRuntime(768):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-28 15:17:44.554: E/AndroidRuntime(768):  at dalvik.system.NativeStart.main(Native Method)
12-28 15:17:44.554: E/AndroidRuntime(768): Caused by: java.lang.NullPointerException
12-28 15:17:44.554: E/AndroidRuntime(768):  at com.example.iolcalci.Srkt.onCreate(Srkt.java:34)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.Activity.performCreate(Activity.java:5104)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-28 15:17:44.554: E/AndroidRuntime(768):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-28 15:17:44.554: E/AndroidRuntime(768):  ... 11 more

Код Srkt здесь

public class Srkt extends Activity{
EditText k1_e,k2_e,al_e,alconst_e;
float k1,k2,al,al_const;

@Override
protected void onCreate(Bundle savedInstanceState) {
   //TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
     float Rcor;
     float Lcor;
     float Crwdest;
     float Avg_k;
     float Corneal_H;
     float Acd_Const;
     float Offset;
     float Acd_Est;
     float Na=(float) 1.34;
     float C2=(float) 0.33;
     float C3;
     float C4;
     float C5;
     float C6;
     float C8;
     float C9;
     float Iolam;


    k1_e=(EditText)findViewById(R.id.k1_editText);
    k1=Float.parseFloat(k1_e.getText().toString());
    k2_e=(EditText)findViewById(R.id.k2_editText);
    k2=Float.parseFloat(k2_e.getText().toString());
    al_e=(EditText)findViewById(R.id.al_editText);//line 37
    al=Float.parseFloat(al_e.getText().toString());
    alconst_e=(EditText)findViewById(R.id.al_const_editText);
    al_const=Float.parseFloat(alconst_e.getText().toString()); 


    Avg_k=(k1+k2)/2;
    float Rcor1=(float)(337.5/Avg_k);Rcor=Round(Rcor1,2);

    if(al<=24.2){
        Lcor=al;
    }else{
        Lcor=(float) (-3.446+1.716*al-0.0237*(al*al));
    }Lcor=Round(Lcor,2);
    Crwdest=(float) (-5.41+0.58412*Lcor+0.098*Avg_k);Crwdest=Round(Crwdest,2);
    Corneal_H=(float) (Rcor-(Math.sqrt(Rcor*Rcor-Crwdest*Crwdest/4)));Corneal_H=Round(Corneal_H,2);
    Acd_Const=(float) (0.62467*al_const-68.747);
    Offset=(float) (Acd_Const-3.336);Offset=Round(Offset,2);
    Acd_Est=(Corneal_H+Offset); float Acd_Est1=Round(Acd_Est,2);
    C3=(float) (0.97971*al+0.65696);C3=Round(C3,2);     
    C4=C3-Acd_Est1;C4=Round(C4,2);
    C5=(float) ((Na*Rcor)-(C2*Acd_Est)); C5=Round(C5, 2);
    C6=(float) ((Na*Rcor1)-(C2*C3));
    C8=(float) ((12*C6)+(C3*Rcor1));C8=Round(C8,2);
    C9=(float) ((12*C5)+(Acd_Est*Rcor1));C9=Round(C9,2);
    Iolam=(float) ((1336*(C6-(0.001*C8*0)))/(C4*(C5-(0.001*0*C9))));Iolam=Round(Iolam,2);                       /*Desired Refraction not taken*/
    }

    public static float Round(float Rval, int Rpl) {
          float p = (float)Math.pow(10,Rpl);
          Rval = Rval * p;
          float tmp = Math.round(Rval);
          return (float)tmp/p;
          }

Я добавил эту операцию выбора строки .

k1_e=(EditText)findViewById(R.id.k1_editText);
k1=Float.parseFloat(k1_e.getText().toString());

обновлено отображение logcat

    12-29 07:16:54.642: E/AndroidRuntime(766): FATAL EXCEPTION: main
12-29 07:16:54.642: E/AndroidRuntime(766): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.iolcalci/com.example.iolcalci.Selection}: java.lang.NumberFormatException: Invalid float: ""
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.os.Looper.loop(Looper.java:137)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread.main(ActivityThread.java:5039)
12-29 07:16:54.642: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
12-29 07:16:54.642: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:511)
12-29 07:16:54.642: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-29 07:16:54.642: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-29 07:16:54.642: E/AndroidRuntime(766):  at dalvik.system.NativeStart.main(Native Method)
12-29 07:16:54.642: E/AndroidRuntime(766): Caused by: java.lang.NumberFormatException: Invalid float: ""
12-29 07:16:54.642: E/AndroidRuntime(766):  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
12-29 07:16:54.642: E/AndroidRuntime(766):  at java.lang.StringToReal.parseFloat(StringToReal.java:289)
12-29 07:16:54.642: E/AndroidRuntime(766):  at java.lang.Float.parseFloat(Float.java:300)
12-29 07:16:54.642: E/AndroidRuntime(766):  at com.example.iolcalci.Selection.onCreate(Selection.java:25)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.Activity.performCreate(Activity.java:5104)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-29 07:16:54.642: E/AndroidRuntime(766):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-29 07:16:54.642: E/AndroidRuntime(766):  ... 11 more

В чем проблема и как я должен заниматься этим?

0
nl ja de

2 ответы

На данный момент я создал активность для каждой формулы в spinner. Я не   знать, как подключить формулу формулы Spinner с формулой   деятельность.

Имейте массив Class , содержащий имя каждого из этих Activities (порядок будет порядком формул, как они отображаются в Spinner ):

Class[] clazz = {NameOfActivity1.class, NameOfActivity2.class /*etc*/};

Затем у вас будет поле int ( mSelected ), которое будет обновляться с помощью OnItemSelectedListener на Spinner ( mSelected = position ). Когда пришло время показать результаты, просто используйте поле mSelected вместе с приведенным выше массивом, чтобы начать правильную работу:

Intent i = new Intent(this, clazz[mSelected]);

Кроме того, в зависимости от того, что вы показываете в результатах, вы можете захотеть иметь единственную активность результатов, которая будет содержать массив с формулами. Для этого действия вы передадите значение int Intent ) выбранной в данный момент формулы из Spinner , и вы будете использовать это для создания правильного результата.

Надлежащая реализация в Selection :

private int mSelected = -1;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.selective);
final Class[] clazz={Srkt.class,Binkhorst.class,Srk2.class,Holladay.class};
spin=(Spinner)findViewById(R.id.formulae);
spin.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        mSelected = pos;
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
       mSelected = -1;
    }
    });
// find the results Button and set a OnClickListener where you'll do the calculation
Button resultsButton = (Button) findViewById(R.id.the_id_of_the_results_button);
resultsButton.setOnClickListener(new OnCLickListener() {

    @Override
    public void onClick(View v) {
        //In here you'll do the calculation
        //you know the selected formula from the value of mSelected
        //after you do the calculation you will start the proper results activity using the clazz array and mSelected
       //you would also pass the results you calculated in the Intent used to start the new activity
    }

});
1
добавлено
@AhamBrahmaasmi Да, то, что я разместил (включая OnClickListener ), находится в методе onCreate .
добавлено автор Luksprog, источник
@AhamBrahmaasmi Исключение довольно ясно, вы пытаетесь разобрать как float пустую строку, которая не удастся. Если у вас есть строки Float.parseFloat в методе onCreate , это вызовет исключение, так как EditTexts в этот момент пуст. См. Мой отредактированный ответ.
добавлено автор Luksprog, источник
@AhamBrahmaasmi Убедитесь, что у вас есть правильные числа с плавающей запятой в EditTexts , когда вы пытаетесь разобрать его с помощью Float.parse .
добавлено автор Luksprog, источник
@AhamBrahmaasmi Упражнение должно представлять собой экран приложения и не должно использоваться в качестве промежуточного класса, как и вы (исключение является нормальным, поскольку вы выполняете поиск EditText , которые не находятся в действии (вы не имеют макета)). Повторите мой ответ. Выполняйте вычисления в Selection и запускайте новое действие при нажатии кнопки результатов.
добавлено автор Luksprog, источник
@AhamBrahmaasmi Установили ли вы контент? правильно ли создан файл макета (если представления добавлены в LinearLayout , вы установили ориентацию в вертикальную?)?
добавлено автор Luksprog, источник
@AhamBrahmaasmi У вас NullPointerException в строке 34 в классе Srkt (который я считаю одним из классов результатов!?!). Я не могу помочь, если вы не показываете код для метода onCreate этого класса (укажите, какая из них - строка 34 ).
добавлено автор Luksprog, источник
Проблема заключается в том, что я не могу ввести любой вход в k1 и k2, поскольку он не отображается на экране. Ват может быть проблемой?
добавлено автор human, источник
просто сомневаюсь! даже метод onlick находится внутри oncreate right. не будет ли та же проблема?
добавлено автор human, источник
Я поместил код синтаксического анализа в кнопку onclicklistner, но syill wen я нажимаю кнопку такой же error.any ключ?
добавлено автор human, источник
Большое спасибо. это помогло мне!
добавлено автор human, источник
я обновил вопрос, пожалуйста, помогите мне
добавлено автор human, источник
обновленный logcat, пожалуйста, помогите
добавлено автор human, источник
это не класс результатов .. это класс вычисления. У него нет макета
добавлено автор human, источник
обновлен код srkt
добавлено автор human, источник

На данный момент я создал активность для каждой формулы в spinner. Я не   знать, как подключить формулу формулы Spinner с формулой   деятельность.

Имейте массив Class , содержащий имя каждого из этих Activities (порядок будет порядком формул, как они отображаются в Spinner ):

Class[] clazz = {NameOfActivity1.class, NameOfActivity2.class /*etc*/};

Затем у вас будет поле int ( mSelected ), которое будет обновляться с помощью OnItemSelectedListener на Spinner ( mSelected = position ). Когда пришло время показать результаты, просто используйте поле mSelected вместе с приведенным выше массивом, чтобы начать правильную работу:

Intent i = new Intent(this, clazz[mSelected]);

Кроме того, в зависимости от того, что вы показываете в результатах, вы можете захотеть иметь единственную активность результатов, которая будет содержать массив с формулами. Для этого действия вы передадите значение int Intent ) выбранной в данный момент формулы из Spinner , и вы будете использовать это для создания правильного результата.

Надлежащая реализация в Selection :

private int mSelected = -1;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.selective);
final Class[] clazz={Srkt.class,Binkhorst.class,Srk2.class,Holladay.class};
spin=(Spinner)findViewById(R.id.formulae);
spin.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        mSelected = pos;
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
       mSelected = -1;
    }
    });
// find the results Button and set a OnClickListener where you'll do the calculation
Button resultsButton = (Button) findViewById(R.id.the_id_of_the_results_button);
resultsButton.setOnClickListener(new OnCLickListener() {

    @Override
    public void onClick(View v) {
        //In here you'll do the calculation
        //you know the selected formula from the value of mSelected
        //after you do the calculation you will start the proper results activity using the clazz array and mSelected
       //you would also pass the results you calculated in the Intent used to start the new activity
    }

});
1
добавлено
@AhamBrahmaasmi Упражнение должно представлять собой экран приложения и не должно использоваться в качестве промежуточного класса, как и вы (исключение является нормальным, поскольку вы выполняете поиск EditText , которые не находятся в действии (вы не имеют макета)). Повторите мой ответ. Выполняйте вычисления в Selection и запускайте новое действие при нажатии кнопки результатов.
добавлено автор Luksprog, источник
@AhamBrahmaasmi Да, то, что я разместил (включая OnClickListener ), находится в методе onCreate .
добавлено автор Luksprog, источник
@AhamBrahmaasmi Исключение довольно ясно, вы пытаетесь разобрать как float пустую строку, которая не удастся. Если у вас есть строки Float.parseFloat в методе onCreate , это вызовет исключение, так как EditTexts в этот момент пуст. См. Мой отредактированный ответ.
добавлено автор Luksprog, источник
@AhamBrahmaasmi Убедитесь, что у вас есть правильные числа с плавающей запятой в EditTexts , когда вы пытаетесь разобрать его с помощью Float.parse .
добавлено автор Luksprog, источник
@AhamBrahmaasmi У вас NullPointerException в строке 34 в классе Srkt (который я считаю одним из классов результатов!?!). Я не могу помочь, если вы не показываете код для метода onCreate этого класса (укажите, какая из них - строка 34 ).
добавлено автор Luksprog, источник
@AhamBrahmaasmi Установили ли вы контент? правильно ли создан файл макета (если представления добавлены в LinearLayout , вы установили ориентацию в вертикальную?)?
добавлено автор Luksprog, источник
Проблема заключается в том, что я не могу ввести любой вход в k1 и k2, поскольку он не отображается на экране. Ват может быть проблемой?
добавлено автор human, источник
Я поместил код синтаксического анализа в кнопку onclicklistner, но syill wen я нажимаю кнопку такой же error.any ключ?
добавлено автор human, источник
Большое спасибо. это помогло мне!
добавлено автор human, источник
просто сомневаюсь! даже метод onlick находится внутри oncreate right. не будет ли та же проблема?
добавлено автор human, источник
обновленный logcat, пожалуйста, помогите
добавлено автор human, источник
это не класс результатов .. это класс вычисления. У него нет макета
добавлено автор human, источник
обновлен код srkt
добавлено автор human, источник
я обновил вопрос, пожалуйста, помогите мне
добавлено автор human, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)