簡體   English   中英

如何使用arrayAdapter中的intent進入第三個活動?

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

我幾乎完成了這個項目,代碼很簡陋,但我試圖通過arrayadapter傳遞數據到第三個活動,但即使沒有數據傳遞意圖也不會把它帶到第三個活動。

我一直在瀏覽stackoverflow,我已經改變了上下文。 我試過添加標志等。

我有三個主要活動,一個適配器和兩個自定義類。

此外,如果重要,列表視圖會根據輸入的數據將自定義適配器用於其他卡片視圖。

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

    }

    }

像這樣改變onclick

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

如果它不起作用,請嘗試更改Dataclass以使用intent實現parcelable和sent parcelable對象。

注意:如果您沒有使用可序列化的特定優勢,則始終優先選擇parcelable over serializable(Parcelable是perfomant)。

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

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

試試這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM