简体   繁体   中英

How do I use intent from arrayAdapter to go into a third activity?

I am almost done with this project, and the code is janky, but I am trying to pass data through the arrayadapter to the third activity, but even without data passing the intent wont take it to the third activity.

I've been looking through stackoverflow, I've changed the context. I've tried adding flags and such.

I have three main activities, one adapter and two custom classes.

Also, the list view uses a custom adapter to a different card view depending on data entered, if that matters.

public class BookAdaptor extends ArrayAdapter {
    int mLayoutID;
    List<BookList> dataset;
    Context mContext;

    public BookAdaptor(Context context, int resource, List<BookList> objects) {
        super(context, resource, objects);
        mContext = context;
        dataset = objects;
        mLayoutID = resource;
    }

    public class pickedAuthor implements Serializable {
        private String genre;
        private String bookTitle;
        private String synopsis;
        private String bookAuthor;
        private String bookPublisher;
        private String bookImage;
        private int currentPlace;

        public pickedAuthor(String genre, String bookTitle, String synopsis, String bookAuthor, String bookPublisher, String bookImage, int currentPlace) {
            this.genre = genre;
            this.bookTitle = bookTitle;
            this.synopsis = synopsis;
            this.bookAuthor = bookAuthor;
            this.bookPublisher = bookPublisher;
            this.bookImage = bookImage;
            this.currentPlace = currentPlace;
        }

        public int getCurrentPlace() {
            return currentPlace;
        }

        public String getCategoryImage() {
            return genre;
        }

        public String getBookImage() {
            return bookImage;
        }
        public String getBookTitle() {
            return bookTitle;
        }

        public String getBookSynopsis() {
            return synopsis;
        }

        public String getBookAuthor() {
            return bookAuthor;
        }

        public String getBookPublisher() {
            return bookPublisher;
        }

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View currentListViewItem = convertView;

        // Check if the existing view is being reused, otherwise inflate the view
        if (currentListViewItem == null) {
            currentListViewItem = LayoutInflater.from(getContext()).inflate(mLayoutID, parent, false);
        }
        //Get the Number object for the current position
        final BookList currentNumber = dataset.get(position);

        //Set the attributed of list_view_number_item views
        ImageView iconImageView = (ImageView) currentListViewItem.findViewById(R.id.image_view_book_icon);
        int i = mContext.getResources().getIdentifier(
                currentNumber.getBookImage(), "drawable",
                mContext.getPackageName());

        //Setting the icon
        iconImageView.setImageResource(i);

        TextView titleNameTextView = (TextView) currentListViewItem.findViewById(R.id.text_view_book_title);
        titleNameTextView.setText(currentNumber.getBookTitle());

        TextView authorNameTextView = (TextView) currentListViewItem.findViewById(R.id.text_view_author_name);
        authorNameTextView.setText(currentNumber.getBookAuthor());

        TextView publisherNameTextView = (TextView) currentListViewItem.findViewById(R.id.text_view_publisher_name);
        publisherNameTextView.setText(currentNumber.getBookPublisher());


        CardView button = (CardView) currentListViewItem.findViewById(R.id.card_view_list_item);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent;
                int currentDigit;

                intent = new Intent(mContext.getApplicationContext(), DetailsActivity.class);

                String currentGenre,currentTitle, currentBookImage, currentCategoryImage, currentSynopsis, currentAuthor, currentPublisher;
                currentDigit = 1;
                currentGenre = currentNumber.getCategoryImage();
                currentTitle = currentNumber.getBookImage().toString();
                currentBookImage = currentNumber.getBookImage();
                currentSynopsis = currentNumber.getBookSynopsis();
                currentAuthor = currentNumber.getBookAuthor();
                currentPublisher = currentNumber.getBookPublisher();

                pickedAuthor author;
                author = new pickedAuthor(currentGenre, currentTitle, currentSynopsis, currentAuthor, currentPublisher, currentBookImage, currentDigit);


                intent.putExtra("Author", author);
                mContext.getApplicationContext().startActivity(intent);
            }
        });

        return currentListViewItem;
    }
}

        package com.example.bookstore;

        import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;

    public class DetailsActivity extends AppCompatActivity {
        public BookAdaptor.pickedAuthor author;

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

            Intent intent = getIntent();
            author = (BookAdaptor.pickedAuthor) intent.getSerializableExtra("Author Name");

            TextView titleNameTextView = (TextView) findViewById(R.id.text_view_book_title);
            titleNameTextView.setText(author.getBookTitle());

            TextView authorNameTextView = (TextView) findViewById(R.id.details_text_view_author_name);
            authorNameTextView.setText(author.getBookAuthor());

            TextView publisherNameTextView = (TextView) findViewById(R.id.details_text_view_publisher_name);
            publisherNameTextView.setText(author.getBookPublisher());

            TextView synopsisTextView = (TextView) findViewById(R.id.text_view_synopsis);
        synopsisTextView.setText(author.getBookSynopsis());

    }

    }

Change onclick like this

Intent intent = new Intent(v.getContext, ThirdActivity.class);
DataClass data = new DataClass(param1, param2);
intent.putExtra("param", data);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
v.getContext().startActivity(intent);

If it did not work, try changing the Dataclass to implement parcelable and sent parcelable object using intent.

Note : Always prefer parcelable over serializable (Parcelable is perfomant) if you have no specific advantage using serializables.

    intent.putExtra("Author", new Gson().toJson(author));

    Author author= new Gson().fromJson(intent.getStringExtra("Author"), Author.class);

try like this.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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