从另一个Intent中添加项目到数组列表



我有一个应用程序,有一个书对象的ListView。我点击一个按钮,将我带到另一个活动(AddBook),在那里我可以添加另一本书并将信息传递回MainActivity。我可以创建原始的Book对象并将其添加到ListView,但是如果我尝试通过单击add按钮(在MainActivity上)添加第二本书,并在返回MainActivity时再次通过AddBook,我添加的第一本书将被第二个条目所取代。我想我需要一个循环或条件,但我不知道是什么。

我在第94行添加了if语句,因为在我填写AddBook Activity

上的字段之前,对象会自动添加。
    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();
    }
}

}

你可以使用startActivityForResult而不是startActivity,这样你就可以从AdBook Activity接收数据,例如

 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();
        }
    }
}

在adBookActivity中,确保在关闭activity之前调用setResult(1, data)

*更改1 (requestcode)为常量,以使代码更具可读性

我认为这是你应该使用sqlite数据库的最佳方式。并从sqlite数据库表中设置列表框项,它将快速运行您的应用程序。

最新更新