Как я могу поддерживать ListView Вашими данными, вернувшись другой активности?

Я делаю приложение контактов для Android, правда я новый в этом. У меня есть одна ListView в MainActivity что должен показывать контакты или сообщение в случае, если нет контактов и Флоатинг Актион Button, нажимать на этот, приводит меня в другую активность с формуляром, чтобы создавать контакт, когда я направляю в активность этот, появляется, но добавив другой контакт, первый исчезает и так - всякий раз когда я добавляю контакт. Как я делаю для того, чтобы после того, как сохраняю контакт, они присоединились в ListView главной активности?

Код моего MainActivity:

public class MainActivity extends AppCompatActivity {

private ArrayList<Contacto> contactos = new ArrayList<>();
private ArrayList<String> nombresContactos = new ArrayList<>();
private ListView lstContactos;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    agregarFab();

    //Inicializa el campo de texto y la lista, pone en la interfaz el campo de texto cuando la lista está vacía:
    TextView tvVacio = (TextView) findViewById(R.id.tvVacio);
    lstContactos =  (ListView) findViewById(R.id.lstContactos);
    lstContactos.setEmptyView(tvVacio);

    //Agarra datos despues de crear un contacto nuevo y los devuelve para crear un contacto nuevo para la lista:
    try {

        Bundle contacto = getIntent().getExtras();
        String nombre = contacto.getString(getResources().getString(R.string.name));
        String telefono = contacto.getString(getResources().getString(R.string.phone));
        String email = contacto.getString(getResources().getString(R.string.email));
        String date = contacto.getString(getResources().getString(R.string.date));
        String descripcion = contacto.getString(getResources().getString(R.string.description));

        Contacto temp = new Contacto(nombre, date, descripcion, telefono, email);

        if (nombre != null && telefono != null) {
            contactos.add(temp);
            nombresContactos.add(temp.getNombre());
        }

        lstContactos.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, nombresContactos));
    } catch (Exception e) {
        lstContactos.setEmptyView(tvVacio);
    }

}

public void agregarFab() {
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent nuevoContacto = new Intent(MainActivity.this, AgregarContacto.class);
            startActivity(nuevoContacto);
        }
    });
}

Это код второй активности, чтобы добавлять контакт:

public class AgregarContacto extends AppCompatActivity {

private EditText etNombre;
private EditText etTelefono;
private EditText etEmail;
private EditText etDate;
private DatePickerDialog dpdFecha;
private EditText etDescription;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_agregar_contacto);

    //Inicializa UI:
    etNombre = (EditText) findViewById(R.id.etNombre);
    etTelefono = (EditText) findViewById(R.id.etTelefono);
    etEmail = (EditText) findViewById(R.id.etEmail);
    etDate = (EditText) findViewById(R.id.etDate);
    etDate.setInputType(InputType.TYPE_NULL);
    etDescription = (EditText) findViewById(R.id.etDescription);

    iniciarPicker();

    etDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                dpdFecha.show();
            }
        }
    });
}

public void iniciarPicker() {
    Calendar cal = Calendar.getInstance();
    dpdFecha = new DatePickerDialog(this, new OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            etDate.setText(String.valueOf(dayOfMonth) + "/" + String.valueOf(month) + "/" + String.valueOf(year));
        }
    }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
}

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_agregar_contacto_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.btnCancelar:
            Intent inicio = new Intent(this, MainActivity.class);
            startActivity(inicio);
            finish();
            break;
        case R.id.btnAceptar:
            Intent inicioSi = NavUtils.getParentActivityIntent(this);

            inicioSi.putExtra(getResources().getString(R.string.name), etNombre.getText().toString());
            inicioSi.putExtra(getResources().getString(R.string.phone), etTelefono.getText().toString());
            inicioSi.putExtra(getResources().getString(R.string.email), etEmail.getText().toString());
            inicioSi.putExtra(getResources().getString(R.string.date), etDate.getText().toString());
            inicioSi.putExtra(getResources().getString(R.string.description), etDescription.getText().toString());
            inicioSi.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            startActivity(inicioSi);
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
} }

Если я добавляю первый контакт (A), появись на главном экране: introducir la descripción de la imagen aquí

Но если я добавляю другой контакт (B) одинокий, у меня выходит последний: introducir la descripción de la imagen aquí

Тогда то, что я ищу, состоит в том, чтобы способствовать тому, чтобы в списке появились все контакты, которые он сохраняет, не только последний, но не, как я могу делать это.

Большое спасибо.

1
задан 07.04.2017, 17:17
0 ответов

Ошибка состоит в том, что ты добавляешь стоимость, когда ты переходишь из одной Activity в другую. Тогда, если в тебе MainActivity ты имеешь

Bundle contacto = getIntent().getExtras();
String nombre = contacto.getString(getResources().getString(R.string.name));
String telefono = contacto.getString(getResources().getString(R.string.phone));
String email = contacto.getString(getResources().getString(R.string.email));
String date = contacto.getString(getResources().getString(R.string.date));
String descripcion = contacto.getString(getResources().getString(R.string.description));

И ты уходишь в Activity добавления контактов, ты пишешь соответствующие данные и ты это добавляешь снопы это:

Intent inicioSi = NavUtils.getParentActivityIntent(this);

inicioSi.putExtra(getResources().getString(R.string.name), etNombre.getText().toString());
inicioSi.putExtra(getResources().getString(R.string.phone), etTelefono.getText().toString());
inicioSi.putExtra(getResources().getString(R.string.email), etEmail.getText().toString());
inicioSi.putExtra(getResources().getString(R.string.date), etDate.getText().toString());
inicioSi.putExtra(getResources().getString(R.string.description), etDescription.getText().toString());
inicioSi.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Ты заменяешь стоимость, которую ты считал ранее сохраняемыми. Ты будешь должен делать следующее:

Поскольку уже у тебя есть класс Contacto и один ArrayList из типа созданный Контакт ты должен делать это в MainActivity

public void agregarFab() {
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent nuevoContacto = new Intent(MainActivity.this, AgregarContacto.class);
            intent.putExtra("contactos", nombresContactos);
            startActivity(nuevoContacto);
        }
    });
}

Поскольку ты видишь, он послал первой Activity во вторую ты ArrayList<Contacto> названный nombresContactos.

Во втором Activity, ты должен делать:

ArrayList<Contacto> contactos = (ArrayList<Contacto>) getIntent().getSerializableExtra("contactos");

Когда ты добавишь контакт, сделай это:

case R.id.btnAceptar:
        String nombre = etNombre.getText().toString();
        String telefono = etTelefono.getText().toString();
        String email = etEmail.getText().toString();
        String date = etDate.getText().toString();
        String descripcion = etDescription.getText().toString();
        Contacto nuevo_contacto = new Contacto(nombre, date, descripcion, telefono, email);
        contactos.add(nuevo_contacto);
        Intent inicioSi = NavUtils.getParentActivityIntent(this);
        inicioSi.putExtra("contactos", contactos);
        startActivity(inicioSi);
        finish();
        break;

Новый контакт ты это добавляешь к arraylist, потом посылаешь в тебя первая Activity договоренность, у которой сейчас есть новая статья. Сейчас только договорись о том, чтобы изменить первую Activity и оставлять ее такой:

ArrayList<Contacto> contactos = (ArrayList<Contacto>) getIntent().getSerializableExtra("contactos");
1
ответ дан 03.12.2019, 17:59
  • 1
    Большое спасибо! Твой ответ я ayudó чтобы это решать, я не смог посылать ArrayList< Contacto> меня помечала ошибка, но пошлите каждое поле контакта как ArrayList< String> дополнительный в intent, но сейчас я surgió другая проблема, первый раз despué s устанавливания aplicació n, функционируй, как он должен, но если я пробую ее открыться снова, он закрывается и говорит, что aplicació n он задержался, у меня нет идеи, состоящей в том, что он может вызывать это. Поскольку он был, большое спасибо снова! –  26.12.2016, 07:12

Теги

Похожие вопросы