Добавление пунктов в Spinner

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2015

Требуется добавить в Spinner дополнительные пункты. Вот, допустим, так делал через ArrayList, но - тут надо сделать какую то генерацию operator[i] чтобы можно было добавлять, так как сделано сейчас - нельзя зайти в то активити где Spinner (ошибка - т.к. operator4 не создан).

spinner = (Spinner)findViewById(R.id.shablspin);
        ArrayList<Operator> operators = new ArrayList<Operator>();
        Operator operator = new Operator("МТС №1", "192.168.1.1", "1000", "192.168.1.2", "2000", "internet", "www.umc.ua");
        operators.add(operator);

        Operator operator1 = new Operator("МТС №2", "192.168.1.1", "1000", "192.168.1.2", "2000", "internet", "www.umc.ua");
        operators.add(operator1);

        Operator operator2 = new Operator("Kyivstar", "192.168.1.1", "1000", "192.168.1.2", "2000", "internet", "www.ab.kyivstar.ua");
        operators.add(operator2);

        Operator operator3 = new Operator("Life:)", "192.168.1.1", "1000", "192.168.1.2", "2000", "internet", "www.life.ua");
        operators.add(operator3);

    Operator operator4 = new Operator(shablonname.toString(), ip1.toString(), socket1.toString(),
            ip2.toString(), socket2.toString(),
            apn.toString(), gprs.toString());
    operators.add(operator4);

//Адаптер
        ArrayAdapter<Operator> adapter = new ArrayAdapter<Operator>(this, android.R.layout.simple_list_item_1, operators);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

-

public class dtmfshablon extends ActionBarActivity implements View.OnClickListener {

EditText shabl,ip1, socket1, ip2, socket2, gprs, apn;
Button save;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dtmfshablon);

    shabl = (EditText) findViewById(R.id.shablname);

    ip1 = (EditText) findViewById(R.id.ip1);
    socket1 = (EditText) findViewById(R.id.socket1);
    ip2 = (EditText) findViewById(R.id.ip2);
    socket2 = (EditText) findViewById(R.id.socket2);
    gprs = (EditText) findViewById(R.id.gprs);
    apn = (EditText) findViewById(R.id.apn);

    save = (Button) findViewById(R.id.savebtn);
    save.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.savebtn:
            Intent intent = new Intent(this, objcontrolactivity.class);
            intent.putExtra("shabl", shabl.getText().toString());
            intent.putExtra("ip1", ip1.getText().toString());
            intent.putExtra("socket1", socket1.getText().toString());
            intent.putExtra("ip2", ip2.getText().toString());
            intent.putExtra("socket2", socket2.getText().toString());
            intent.putExtra("apn", apn.getText().toString());
            intent.putExtra("gprs", gprs.getText().toString());
            startActivity(intent);
    }
}

Ответы

▲ 1

Вам нужно вызывать вторую активити , в которой вы вводите данные - с помощью метода startActivityForResult() , тогда вы сможете получить интент , отправленный второй активити в первую через метод обратного вызова onActivityResult().
После того , как интент для отправки заполнен во второй активити , надо не вызывать первую через startActivity() , а заканчивать выполнение второй методом finish() - это закроет вторую активити и отправит в метод onActivityResult() первой активити подготовленный интент .
вот как это работает.

Затем , в методе onActivityResult() первой активити вы извлекаете данные из полученного интента , заполняете ими очередной элемент своего ArrayList и добавляете его к коллекции operators.add(operator4); после вызываете метод адаптера notifyDataSetChanged() для обновления пунктов в списке .
Для того , чтобы все это работало operators и adapter должны быть полями класса , а не локальными переменными метода.