Назовите ценность блесны?Также используйте другие значения, основанные на значении счетчика - PullRequest
3 голосов
/ 25 января 2010

У меня есть «диафрагма» счетчика, настроенная со списком чисел, и «режим» счетчика с двумя вариантами. Когда кнопка нажата, мне нужно выполнить вычисления, используя различные входные данные, в том числе текущий выбор из «диафрагмы» и значение, полученное из «режима». Как я могу назвать значение счетчика, чтобы я мог использовать его в расчете?

Кроме того, как я могу использовать режим выбора счетчика, чтобы установить это другое значение, прежде чем применять его в вычислениях? Если быть более точным, если для счетчика установлено значение Small, то значение, которое я использую в вычислениях, равно 0,015, а если выбрано значение Large, мне нужно использовать 0,028

Мои другие входные данные - представления EditText, поэтому сейчас я настроен так:

    input = (EditText) findViewById(R.id.input1); 
    input2 = (EditText) findViewById(R.id.input2);
    input3 = (EditText) findViewById(R.id.input3); 
    input4 = (EditText) findViewById(R.id.input4);
    output = (TextView) findViewById(R.id.result); 
    output2 = (TextView) findViewById(R.id.result2);

    //aperture dropdown
    Spinner s = (Spinner) findViewById(R.id.apt);
    ArrayAdapter adapter2 = ArrayAdapter.createFromResource(        this, R.array.apertures,       
    android.R.layout.simple_spinner_item);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s.setAdapter(adapter2);

    //button
    final Button button = (Button) findViewById(R.id.calculate);
    button.setOnClickListener(new View.OnClickListener() {             
     public void onClick(View v) {                 
      // Perform action on click
      doCalculation();
       }         
      });
     }

private void doCalculation() { 
    // Get entered input value 
    String strValue = input.getText().toString(); 
    String strValue2 = input2.getText().toString();
    String strValue3 = input3.getText().toString(); 
    String strValue4 = input4.getText().toString();

    // Perform a hard-coded calculation 
    double imperial1 = (Double.parseDouble(strValue3) + (Double.parseDouble(strValue4) / 12));
    double number = Integer.parseInt(strValue) * 2; 
    double number2 = ((number / 20) + 3) / Integer.parseInt(strValue2);

    // Update the UI with the result 
    output.setText("Result:  "+ number); 
    output2.setText("Result2: "+ imperial1); 
}
}

Это не фактическое уравнение, это просто проверка, чтобы убедиться, что все соединяется правильно. Как бы я назвал значение диафрагмы «диафрагмой», а «маленький / большой» - «режимом»

Ответы [ 3 ]

4 голосов
/ 25 января 2010

Чтобы получить значение счетчика, при необходимости вызовите одно из следующих действий:

Object item = spinner.getSelectedItem();

long id = spinner.getSelectedItemId();

int position = getSelectedItemPosition();

View selectedView = getSelectedView();

В вашем случае вы можете объявить счетчик как конечный и передать выбранный элемент в метод doCalculations () следующим образом:

    final Spinner aptSpinner = (Spinner) findViewById(R.id.apt);
    ...

    //button
    final Button button = (Button) findViewById(R.id.calculate);
    button.setOnClickListener(new View.OnClickListener() {             
     public void onClick(View v) {                 
      // Perform action on click
      doCalculation(aptSpinner.getSelectedItem());
       }         
      });
     }

    private void doCalculation(Object selectedItem) { 

        ...

    }

Вероятно, было бы неплохо, чтобы вы взяли базовую книгу по Java и узнали, как работает область Java.

2 голосов
/ 30 октября 2010

Почему бы не заполнить ваш ArrayAdapter программно объектами известного типа и использовать его. Я написал учебник аналогичного характера (ссылка внизу), который делает это. Основная предпосылка состоит в том, чтобы создать массив объектов Java, сообщить об этом счетчику, а затем использовать эти объекты непосредственно из класса счетчика. В моем примере у меня есть объект, представляющий «Состояние», которое определяется следующим образом:

пакет com.katr.spinnerdemo;

государственный класс Государство {

// Okay, full acknowledgment that public members are not a good idea, however
// this is a Spinner demo not an exercise in java best practices.
public int id = 0;
public String name = "";
public String abbrev = "";

// A simple constructor for populating our member variables for this tutorial.
public State( int _id, String _name, String _abbrev )
{
    id = _id;
    name = _name;
    abbrev = _abbrev;
}

// The toString method is extremely important to making this class work with a Spinner
// (or ListView) object because this is the method called when it is trying to represent
// this object within the control.  If you do not have a toString() method, you WILL
// get an exception.
public String toString()
{
    return( name + " (" + abbrev + ")" );
}
}

Затем вы можете заполнить счетчик массивом этих классов следующим образом:

       // Step 1: Locate our spinner control and save it to the class for convenience
    //         You could get it every time, I'm just being lazy...   :-)
    spinner = (Spinner)this.findViewById(R.id.Spinner01);

    // Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects
    ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
          android.R.layout.simple_spinner_item, new State[] {   
                new State( 1, "Minnesota", "MN" ), 
                new State( 99, "Wisconsin", "WI" ), 
                new State( 53, "Utah", "UT" ), 
                new State( 153, "Texas", "TX" ) 
                });

    // Step 3: Tell the spinner about our adapter
    spinner.setAdapter(spinnerArrayAdapter);  

Вы можете получить выбранный элемент следующим образом:

State st = (State)spinner.getSelectedItem();

А теперь у вас есть класс java для работы. Если вы хотите перехватить при изменении значения счетчика, просто реализуйте OnItemSelectedListener и добавьте соответствующие методы для обработки событий.

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{
    // Get the currently selected State object from the spinner
    State st = (State)spinner.getSelectedItem();

    // Now do something with it.
} 

public void onNothingSelected(AdapterView<?> parent ) 
{ 
}

Вы можете найти весь учебник здесь: http://www.katr.com/article_android_spinner01.php

0 голосов
/ 20 октября 2010

Если R.array.apertures является String Array, то вы можете использовать

Object item = spinner.getSelectedItem(); 

if(item != null) {

String SelectedString = item.toString();

}

Если это какой-либо другой объект, скажем Персона.

тогда

if(item != null) {

Person SelectedString = (Person) item;

}
...