Какой лучший способ передать ресурсы? - PullRequest
0 голосов
/ 22 февраля 2010

Вам нужен совет от ваших экспертов. Я только начал с Android программирование, и в то время как я наконец получил то, что я хочу, чтобы мой "Hello World" делал, я чувствую как будто я блещу, а не цепляюсь за понятия.

Я создал три поля EditText. Ниже тех, что я создал три спиннеры. Выберите номер в Spinner, и он будет отображаться в соответствующем поле EditText. Spinner 1 соотносится с EditText 1, Spinner 2 с EditText 2 и Spinner 3 с EditText 3. У меня было чертовское время заставить это работать. У меня есть некоторые уборка, чтобы сделать.

В моем стартапе I класса:

    EditText [] pick_nums = new EditText[3];
    pick_nums[0] = (EditText) findViewById(R.id.r1c1);
    pick_nums[1] = (EditText) findViewById(R.id.r1c2);
    pick_nums[2] = (EditText) findViewById(R.id.r1c3);

    Spinner test1 = (Spinner) findViewById(R.id.spin_pick_num1);
    Spinner test2 = (Spinner) findViewById(R.id.spin_pick_num2);
    Spinner test3 = (Spinner) findViewById(R.id.spin_pick_num3);

// Я создал класс для инициализации счетчиков.

Context g = getApplicationContext();
    Initialize_stuff spin1 = new Initialize_stuff(test1, g);
    Initialize_stuff spin2 = new Initialize_stuff(test2, g);
    Initialize_stuff spin3 = new Initialize_stuff(test3, g);

// Я создал класс, чтобы поместить число в соответствующее поле EditText. Я хотел, чтобы пользователь не нажимал кнопку для заполнения и как только три числа в я сделаю что-то с ними без необходимости нажмите кнопку.

Handle_Picks hp = new Handle_Picks(g, pick_nums);

// Вот где я думаю, что это становится грязно и неловко. Чтобы заставить работать Handle_Picks правильно я создал метод для установки контекста, массив EditTexts и ссылка на класс Handle_Picks hp.

Spinner_Listener listen = new Spinner_Listener();    
listen.set_context(g, pick_nums, hp);
test1.setOnItemSelectedListener(listen);
test2.setOnItemSelectedListener(listen);
test3.setOnItemSelectedListener(listen);

// В классе Spinner_Listener

public class Spinner_Listener implements OnItemSelectedListener

static Handle_Picks hp1;  //set in a method
private String num;
String v;
String spin_id;
int vv;

public void onItemSelected(AdapterView<?> parent, View view, int pos,
        long id)
{
    //To make this work I had to find the name of the spinner that was
    //used so I could correlate it with the right EditText

     vv = parent.getId();
     v = parent.getResources().getResourceName(vv);
     spin_id = parent.getResources().getResourceEntryName(vv);
     setNum(parent.getItemAtPosition(pos).toString());
}

public void setNum(String s)
{
    num = s;
    hp1.handle_nums(spin_id, num);
}

// наконец, в классе Handle_Picks I:

public class Handle_Picks extends Activity
{
  static Context theContext;
  EditText [] et;
  String spin_num;

// constructor  
Handle_Picks(Context f, EditText[] array)
{
    theContext = f;
    et = array;
}


public void handle_nums(String id, String aNumber)
{
    spin_num = id;
    if (spin_num.equalsIgnoreCase("spin_pick_num1"))
        et[0].setText(aNumber);
    else if (spin_num.equalsIgnoreCase("spin_pick_num2"))
        et[1].setText(aNumber);
    else if (spin_num.equalsIgnoreCase("spin_pick_num3"))
        et[2].setText(aNumber);
}

Есть ли лучший способ передавать или ссылаться на ресурсы вокруг различных классов? Необходимость передать контекст и массив EditText классу Handle_Picks прежде чем я смог использовать Handle_Picks из класса Spinner_Listener не кажется правильным. Кажется, опасно

Какой способ лучше?

1 Ответ

1 голос
/ 22 февраля 2010

Ммм ... ну ... очень мало того, что у тебя здесь, мне очень нравится. Решая простые вещи:

  • Чтобы получить значение Spinner, позвоните getSelectedItem(). Нет смысла возиться с ресурсами, чтобы заполнить EditText на основе значения Spinner. В вашем методе Spinner_Listener onItemSelected() ваш Spinner известен как parent (Spinner наследуется от AdapterView, а getSelectedItem() является методом AdapterView).

  • Не звоните getApplicationContext(), особенно для вещей, связанных с пользовательским интерфейсом. Ваш Activity является Context - просто используйте его.

  • Никогда не используйте конструктор в Activity (например, Handle_Picks).

  • Никогда не создавайте экземпляр Activity напрямую (например, new Handle_Picks()).

Учитывая все вышесказанное, вам вообще не нужно Handle_Picks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...