2012-02-02 4 views
1

Итак, в Android/Java мне нужно получить глобальную переменную, которая является EditText[], которую я создаю над методом моей деятельности внутри onClickListener. Вот переменная:Android: доступ к глобальной переменной внутри onClickListener

public class NCDTCPRelayActivity extends Activity { 
    final EditText[] relayLabelEdits = new EditText[n]; 

Где n является еще одной глобальной переменной целое.

Моя проблема заключается в том, что для того, чтобы получить доступ к этим EditText внутри onclickListener я должен был сделать окончательный для доступа внутрь onClickListener, но мне нужно назначить relayLabelEdits к новому EditText[], если значение п изменений, которые он имеет обыкновение делать ,

Ниже onClickListener (основная часть приложения, чтобы открыть TCP-сокета и управления реле через Wi-Fi, так просто игнорировать информацию сокета и те System.out.println, которые указывают на relayLabelEdits возврата нуль, если только переменной relayLabelEdits является окончательным):

Button save = new Button(this); 
    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      EditText[] saveTargets = relayLabelEdits; 
      System.out.println("Direct: " + relayLabelEdits[0]); 
      System.out.println("first try " + saveTargets[0]); 



      //Creates string to create the database names on the fly 
      String relayToSave; 

      int myNum = 0; 
      try { 
       myNum = Integer.parseInt(portEditText.getText().toString()); 
      } catch(NumberFormatException nfe) { 
       Toast toast = Toast.makeText(getBaseContext(), "The Port Number you entered must only contain numbers", Toast.LENGTH_LONG); 
       toast.show(); 
       return; 
      } 
      System.out.println(ipAEditText.getText().toString()); 
      cPanel.saveString("ipA", ipAEditText.getText().toString()); 
      cPanel.saveInt("port", myNum); 

      for (int i = 0; i < n; i++) { 
       relayToSave = "relay" + (i+1); 
       System.out.println("HERE I AM"); 
       System.out.println(relayLabelEdits[i]); 
       cPanel.saveString(relayToSave, relayLabelEdits[i].getText().toString()); 
       //cPanel.saveString(relayToSave, "It worked"); 
       System.out.println("HERE I AM"); 
      } 

      if (cPanel.connect() == true){ 
       createMainContainer(); 
       setContentView(sView); 
       getRelayNames(); 
       displayRelayNames(); 
       updateButtonText(); 
      } 
      else { 
       Toast toast = Toast.makeText(getBaseContext(), "Could Not Connect, check IP address and Port Number", Toast.LENGTH_LONG); 
       toast.show(); 
      } 
     } 
    }); 

Поэтому любые идеи о том, как я могу получить доступ к EditText[] внутри onClickListener, не делая его окончательным?

+1

Чтобы уточнить, в Java нет такой вещи, как глобальные переменные. 'relayLabelEdits' является обычным членом класса с областью пакета. (Это выглядит неправильно для меня. Почему вы хотите это сделать?) – Matthias

+0

Поэтому я могу создать массив EditTexts в цикле for, который будет масштабироваться с количеством реле, которое они имеют на стороне сервера tcp. – Poodimizer

+0

Как бы вы это сделали? – Poodimizer

ответ

1

Почему бы вам не сделать слушателем класс снаружи и передать ссылку на него?

+0

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

+0

Хорошо, что отлично поработал. Не могу поверить, что я не думал попробовать. – Poodimizer

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