2015-10-06 1 views
0

depuis quelques heures maintenant, j'ai eu un problème avec les vues de liste dans java dans une application pratique à faire que je suis en train de faire. J'ai une vue de liste sur mon activité principale et après le changement de cette activité et retour à elle, la vue de liste est partie. J'ai googlé et vu des gens changer des choses et enregistrer des instances et essayé de l'implémenter sans succès, cependant, cela pourrait être parce que je suis extrêmement nouveau à Java. Voici le code:Affichage de liste disparaît après avoir changé d'activité

public class MainActivity extends AppCompatActivity { 
private ArrayList items; 
private ArrayAdapter itemsAdapter; 
private ListView lvItems; 

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


    lvItems = (ListView) findViewById(R.id.lvItems); 
    items = new ArrayList(); 
    itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); 

    lvItems.setAdapter(itemsAdapter); 
    items.add("Test"); 
    setupListViewListener(); 

} 

// Attaches a long click listener to the listview 
private void setupListViewListener() { 
    lvItems.setOnItemLongClickListener(
      new AdapterView.OnItemLongClickListener() { 
       @Override 
       public boolean onItemLongClick(AdapterView<?> adapter, 
               View item, int pos, long id) { 
        // Remove the item within array at position 
        items.remove(pos); 
        // Refresh the adapter 
        itemsAdapter.notifyDataSetChanged(); 
        // Return true consumes the long click event (marks it handled) 


        return true; 
       } 

      });} 

public void onChangeView(View v) { 
    setContentView(R.layout.activity_create); 
} 

public void onConfirmItem(View v) { 
    EditText etNewItem = (EditText) findViewById(R.id.etNewItem); 
    String itemText = etNewItem.getText().toString(); 
    itemsAdapter.add(itemText); 
    etNewItem.setText(""); 
    setContentView(R.layout.activity_main); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu items for use in the action bar 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

Répondre

1

Vous utilisez setContentView() à plusieurs endroits, mais vous n'y définissez pas l'adaptateur. Vous pouvez appeler setContentView chaque fois que vous exécutez le thread d'événement (UI). Sachez que lorsque vous le faites, tous les champs que vous avez initialisés en appelant findViewById devront être réinitialisés.

1

Au lieu de cela:

lvItems.setAdapter(itemsAdapter); 
items.add("Test"); 

Faites ceci:

items.add("Test"); 
lvItems.setAdapter(itemsAdapter); 

vous configurez un adaptateur vide puis & tableau de remplissage

Et l'autre problème est pointé par @Skynet merci pour que

+1

Oui c'est aussi une raison !! – Skynet