En primer lugar, he buscado en muchas otras publicaciones y aún no he encontrado una solución.

MainActivity contiene un ListView y un ImageButton que lleva a AddActivity. Este AddActivity tiene un EditText (nameAddInput) y un Button (addButton).

A pesar de hacer clic en este Button, el ListView en MainActivity permanece vacío ... No entiendo por qué ...

Aquí está el código de MainActivity :

public class MainActivity extends AppCompatActivity {

static final int PICK_CONTACT_REQUEST = 0;

private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;


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

    list = (ListView) findViewById(R.id.itemsList);
    arrayList = new ArrayList<>();
    adapter = new ArrayAdapter<>(this, R.layout.listview_style1, android.R.id.text1, arrayList);
}

public void onClickAddButton(View view) {
    Intent i = new Intent(MainActivity.this, AddActivity.class);
    startActivityForResult(i, 2);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_CONTACT_REQUEST) {
        if (resultCode == RESULT_OK) {
            addNewItem();
        }
    }
}

public void addNewItem() {
    Bundle addNameInfo = getIntent().getExtras();
    if(addNameInfo == null)
        return;
    String nameInput = addNameInfo.getString("nameInput");
    arrayList.add(nameInput);
    list.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

}

En archivo xml de MainActivity en ImageButton: android:onClick="onClickAddButton"

El código de AddActivity :

public class AddActivity extends AppCompatActivity {

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

public void backToMain(View view) {
    Intent i = new Intent();
    EditText nameAddInput = (EditText) findViewById(R.id.nameAddInput);
    String userNameText = nameAddInput.getText().toString();
    i.putExtra("nameInput", userNameText);
    setResult(RESULT_OK, i);
    finish();
}

}

En el archivo xml de AddActivity en el botón: android:onClick="backToMain"

¡¡Espero que alguien pueda ayudar!! ¡¡Gracias de antemano!!

0
ng02 28 dic. 2016 a las 02:08

3 respuestas

La mejor respuesta

GetIntent () le devuelve la intención que lanzó MainActivity, no la que configuró en backInMain

¿Prueba la variable "datos" que le pasó en onActivityResult?

También cambie a

startActivityForResult(i, PICK_CONTACT_REQUEST);

También te sugiero que cambies el nombre de esa variable 😉

0
Hai 27 dic. 2016 a las 23:48

El valor resultante se devuelve en Intent data - Parámetro de la función onActivityResult, no en el miembro de intención de mainActivity.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent    data) {
    if (requestCode == PICK_CONTACT_REQUEST) {
        if (resultCode == RESULT_OK) {
            addNewItem(data.getExtras().getString("nameInput");
       }
   }
}
...
public void addNewItem(String newItem)
...
0
termigrator 27 dic. 2016 a las 23:22

Configure el adaptador solo en onCreate y solo llame a notifyDataSetChanged en el método addNewItem.

0
sanchez23 27 dic. 2016 a las 23:20