2016-10-10 4 views
0

Ich habe eine App, die eine ListView Book-Objekte hat. Ich klicke auf eine Schaltfläche, die mich zu einer anderen Aktivität (AddBook) bringt, wo ich ein weiteres Buch hinzufügen und die Informationen an die MainActivity zurückgeben kann. Ich kann dieses ursprüngliche Buchobjekt erstellen und es der ListView hinzufügen, aber wenn ich versuche, ein zweites Buch hinzuzufügen, indem ich auf die Schaltfläche Hinzufügen (MainActivity) klicke und AddBook erneut durchführe, wenn ich zu MainActivity zurückkehre, wird das erste Buch ersetzt durch den zweiten Eintrag. Ich denke, ich brauche eine Schleife oder Konditional, aber ich kann es nicht herausfinden.Artikel zu Array-Liste von einer anderen Absicht hinzufügen

ich hinzugefügt, um die if-Anweisung in Zeile 94, da das Objekt automatisch hinzugefügt werden würde, bevor ich in die Felder auf der AddBook Aktivität

package com.the93rd.android.bookcatalog; 

    import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.Button; 
    import android.widget.ListView; 
    import android.widget.Toast; 

    import java.util.ArrayList; 

    public class MainActivity extends AppCompatActivity { 

Button mAddBook; 
public ArrayList<Book> books; 
public ListView listView; 
public BookListViewAdapter bookAdapter; 

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

    //Array List of Book objects 
    books = new ArrayList<>(); 

    books.add(new Book("J.K. Rolling", "Harry Potter and The Sorcerers Stone", 8, 
      "0439708184", "Yes")); 
    books.add(new Book("Eoin Colfer", "The Artic Accident", 5, 
      "1423124529", "Yes")); 
    books.add(new Book("George S. Clason", "The Richest Man in Babylon", 9, 
      "1505339111", "No")); 
    books.add(new Book("Khaled Hosseini", "The Kite Runner", 10, 
      "159463193X", "Yes")); 
    books.add(new Book("Daniel Keyes", "Flowers For Algernon", 8, 
      "0156030306", "No")); 

    listView = (ListView) findViewById(R.id.list); 
    bookAdapter = new BookListViewAdapter(this, books); 

    listView.setAdapter(bookAdapter); 


    //Open BookDetails Activity to Display more book information 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      //Get ArrayList element 
      Book book = books.get(position); 

      //Get fields for current Book element 
      String passAuthor = book.getAuthor(); 
      String passTitle = book.getTitle(); 
      int passRating = book.getRating(); 
      String passIsbn = book.getIsbn(); 
      String passSeries = book.getSeries(); 

      Toast.makeText(MainActivity.this, book.getAuthor(), Toast.LENGTH_SHORT).show(); 

      //Pass Extras for Book element to BookDetails Activity 
      Intent openDetail = new Intent(MainActivity.this, BookDetails.class); 
      openDetail.putExtra("Author", passAuthor); 
      openDetail.putExtra("Title", passTitle); 
      openDetail.putExtra("Rating", passRating); 
      openDetail.putExtra("Isbn", passIsbn); 
      openDetail.putExtra("Series", passSeries); 
      startActivity(openDetail); 
     } 
    }); 

    //Open AddBook Activity 
    mAddBook = (Button) findViewById(R.id.add_book); 
    mAddBook.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent addBook = new Intent(MainActivity.this, AddBook.class); 
      startActivity(addBook); 
     } 
    }); 

    //Get extras from AddBook Activity 
    Intent intent = getIntent(); 

    String addAuthor = intent.getStringExtra("addAuthor"); 
    String addTitle = intent.getStringExtra("addTitle"); 
    String addRating = intent.getStringExtra("addRating"); 
    String addIsbn = intent.getStringExtra("addIsbn"); 
    String addSeries = intent.getStringExtra("addSeries"); 

    if(addAuthor != null){ 

     //Add variables from AddBook activity to new Book object 
     books.add(new Book(addAuthor, addTitle, 5, addIsbn, addSeries)); 
     bookAdapter.notifyDataSetChanged(); 
    } 

} 

}

Antwort

0

gefüllt Sie startActivityForResult statt startActivity, so verwenden können, können Sie die Daten aus adbook Aktivität, zum Beispiel

package com.the93rd.android.bookcatalog; 

    import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.Button; 
    import android.widget.ListView; 
    import android.widget.Toast; 

    import java.util.ArrayList; 

    public class MainActivity extends AppCompatActivity { 
    Button mAddBook; 
    public ArrayList<Book> books; 
    public ListView listView; 
    public BookListViewAdapter bookAdapter; 

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

     //Array List of Book objects 
     books = new ArrayList<>(); 

     books.add(new Book("J.K. Rolling", "Harry Potter and The Sorcerers Stone", 8, 
       "0439708184", "Yes")); 
     books.add(new Book("Eoin Colfer", "The Artic Accident", 5, 
       "1423124529", "Yes")); 
     books.add(new Book("George S. Clason", "The Richest Man in Babylon", 9, 
       "1505339111", "No")); 
     books.add(new Book("Khaled Hosseini", "The Kite Runner", 10, 
       "159463193X", "Yes")); 
     books.add(new Book("Daniel Keyes", "Flowers For Algernon", 8, 
       "0156030306", "No")); 

     listView = (ListView) findViewById(R.id.list); 
     bookAdapter = new BookListViewAdapter(this, books); 

     listView.setAdapter(bookAdapter); 


     //Open BookDetails Activity to Display more book information 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       //Get ArrayList element 
       Book book = books.get(position); 

       //Get fields for current Book element 
       String passAuthor = book.getAuthor(); 
       String passTitle = book.getTitle(); 
       int passRating = book.getRating(); 
       String passIsbn = book.getIsbn(); 
       String passSeries = book.getSeries(); 

       Toast.makeText(MainActivity.this, book.getAuthor(), Toast.LENGTH_SHORT).show(); 

       //Pass Extras for Book element to BookDetails Activity 
       Intent openDetail = new Intent(MainActivity.this, BookDetails.class); 
       openDetail.putExtra("Author", passAuthor); 
       openDetail.putExtra("Title", passTitle); 
       openDetail.putExtra("Rating", passRating); 
       openDetail.putExtra("Isbn", passIsbn); 
       openDetail.putExtra("Series", passSeries); 
       startActivity(openDetail); 
      } 
     }); 

     //Open AddBook Activity 
     mAddBook = (Button) findViewById(R.id.add_book); 
     mAddBook.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent addBook = new Intent(MainActivity.this, AddBook.class); 
       int requestCode = 1; 
       startActivityForResult(addBook, requestCode); 
      } 
     }); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     String addAuthor = data.getStringExtra("addAuthor"); 
     String addTitle = data.getStringExtra("addTitle"); 
     String addRating = data.getStringExtra("addRating"); 
     String addIsbn = data.getStringExtra("addIsbn"); 
     String addSeries = data.getStringExtra("addSeries"); 

     if(addAuthor != null){ 
      //Add variables from AddBook activity to new Book object 
      books.add(new Book(addAuthor, addTitle, 5, addIsbn, addSeries)); 
      bookAdapter.notifyDataSetChanged(); 
     } 

    } 
} 

in Ihrem adBookActivity, stellen Sie sicher, erhalten setResult(1, data) anrufen bevor Sie die Aktivität schließen.

* Änderung 1 (requestcode) als konstant, um den Code lesbarer

+0

Vielen Dank, dass ich getan habe, was Sie gesagt haben und das Ergebnis, das ich gesucht habe – Sav

0

Ich denke, der beste Weg, sollten Sie SQLite DB verwenden. Und setzen Sie List Box-Elemente von SQLite Db-Tabelle es wird schnell Ihre App laufen.

+0

Könnten Sie bitte erarbeiten? – manetsus

+0

Zuerst sollten Sie Ihre Daten in SQL-DB speichern. Dann lesen Sie DB und laden Sie seine Daten in Ihre App und wählen Sie ListView Daten scorce als geladene Daten die richtigen Spalten. Daten in SQlite speichern: https://developer.android.com/training/basics/data-storage/databases.html helfen Ihnen. –

+0

Und laden Sie Daten zur Listenansicht: http://saigeethamn.blogspot.in/2011/02/listview-of-data-from-sqlitedatabase.html Ihnen helfen. Dadurch wird Ihre App effizienter. und Sie können viele Daten speichern, da es nicht von Ihrem RAM abhängt. –

Verwandte Themen