Как использовать намерение из arrayAdapter, чтобы перейти к третьему действию? - PullRequest
1 голос
/ 25 июня 2019

Я почти закончил с этим проектом, и код неопрятен, но я пытаюсь передать данные через массив адаптера в третье действие, но даже без передачи данных намерение не приведет его к третьему действию.

Я просматривал стекопоток, я изменил контекст. Я пытался добавить флаги и тому подобное.

У меня есть три основных действия, один адаптер и два пользовательских класса.

Кроме того, в представлении списка используется настраиваемый адаптер для другого представления карточки в зависимости от введенных данных, если это имеет значение.

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

    }

    }

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Изменить на щелчке мышью вот так

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

Если это не сработало, попробуйте изменить Класс данных, чтобы реализовать реализуемый и отправляемый объект с помощью намерения.

Примечание. Всегда отдавайте предпочтение parcelable сериализуемому (Parcelable perfomant), если у вас нет особых преимуществ при использовании сериализуемых.

0 голосов
/ 25 июня 2019
    intent.putExtra("Author", new Gson().toJson(author));

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

попробуй вот так.

...