简体   繁体   English

从另一个意图将项目添加到数组列表

[英]Add Item To Array List From Another Intent

I have an app that has an ListView of Book objects. 我有一个具有Book对象的ListView的应用程序。 I click a button that takes me to another activity (AddBook) where I can add another book and pass the information back to the MainActivity. 我单击一个按钮,将我带到另一个活动(AddBook),可以在其中添加另一本书并将信息传递回MainActivity。 I can create that original Book object and add it to the ListView, but if I try to add a second Book by clicking the add button (on MainActivity) and going through AddBook again when I am return to MainActivity the first book I added is replaced by the second entry. 我可以创建该原始Book对象并将其添加到ListView,但是如果我尝试通过单击添加按钮(位于MainActivity上)并在返回MainActivity时再次通过AddBook来添加第二本书,则替换掉我添加的第一本书在第二个条目之前。 I think I need a loop or conditional but I can't figure it out. 我认为我需要循环或有条件的,但我无法弄清楚。

I added the if statement on line 94 because the object would automatically be added before I filled in the fields on the AddBook Activity 我在第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();
    }

}

} }

you can use startActivityForResult rather than startActivity, so you can receive the data from AdBook Activity, for example 您可以使用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();
        }

    }
}

in your adBookActivity, make sure to call setResult(1, data) before close the activity. 在adBookActivity中,请确保在关闭活动之前调用setResult(1, data)

*change 1 (requestcode) as constant, to make the code more readable *将1(请求代码)更改为常量,以使代码更具可读性

I think is the best way you should use sqlite DB. 我认为这是使用sqlite DB的最佳方法。 And set List box items from sqlite db table it will run fast your app. 并从sqlite db表设置List box项,它将快速运行您的应用程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM