Передача значения ArrayList в Intent.putExtra для Intent.ACTION_SEND - PullRequest
0 голосов
/ 15 сентября 2018

Как передать значение массива (имя_элемента, образец цитаты) в intent.putExtra .. для совместного использования текста ..

В MainActivity.java

 list = new ArrayList<>();

        //loading list view item with this function
        loadRecyclerViewItem();
    }

    private void loadRecyclerViewItem() {

        list.add(new MyQuote("sample name","sample quote"));

В MyRecyclerViewAdapter.java

public void onBindViewHolder(final MyRecycleViewAdapter.ViewHolder myholder, int position) {
        final MyQuote myQuote = myQuoteList.get(position);
        myholder.tv_author.setText(myQuote.getAuthor());
        myholder.tv_quote.setText(myQuote.getQuotedesc());
       myholder.im_favlike.setImageResource(R.drawable.fav_border);
       myholder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

               Intent intent = new Intent (Intent.ACTION_SEND);

               intent.setType("text/plain");
               view.getContext().startActivity(Intent.createChooser(intent,"send to"));

            }
        });
    }

EDIT после реализации Parcelable в классе MyQuote, например, когда я использую intent.putParcelableArrayListExtra ("mani", MyQuote); .... я получаю "выражение ожидается ... в MyRecyclerViewAdapter.java"

public class MyQuote  implements Parcelable{

    private String author;
    private String quotedesc;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {

        parcel.writeString(quotedesc);
        parcel.writeString(author);
        }

    private MyQuote(Parcel parcel){

        quotedesc = parcel.readString();
        author = parcel.readString();

    }
    public static final Parcelable.Creator<MyQuote> CREATOR = new Parcelable.Creator<MyQuote>(){

        @Override
        public MyQuote createFromParcel(Parcel parcel) {
            return new MyQuote(parcel);

        }
        public MyQuote[] newArray(int size){
            return new MyQuote[size];
        }
    };

    //constructor initializing values
    public MyQuote(String author, String quotedesc) {
        this.quotedesc = quotedesc;
        this.author = author;
    }

    //getters
    public String getAuthor() {
        return author;
    }

    public String getQuotedesc() {
        return quotedesc;
    }
}

У меня есть просмотр карты переработчика, который содержит кавычки и авторов ... в виде текстовых сообщений ... и кнопку обмена ... в каждой карточке ... когда пользователь хочет поделиться цитатой, автор определенной карточки ... он может поделиться цитатой (строкой) вместе с автором (строкой) в таких приложениях, как messeges, whatsapp ..etc .. как я могу решить это? реализует parcelable это правильный процесс .. для этой цели или нет .. если это правильно, какой код я должен использовать при нажатии кнопки общего доступа

 @Override
    public void onBindViewHolder(final MyRecycleViewAdapter.ViewHolder myholder, int position) {
        final MyQuote myQuote = myQuoteList.get(position);
        myholder.tv_author.setText(myQuote.getAuthor());
        myholder.tv_quote.setText(myQuote.getQuotedesc());
       myholder.im_favlike.setImageResource(R.drawable.fav_border);
       myholder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

               Intent intent = new Intent (Intent.ACTION_SEND);

intent.putParcelableArrayListExtra("mani" , MyQuote);
               intent.setType("text/plain");
               view.getContext().startActivity(Intent.createChooser(intent,"send to"));

            }
        });
    }

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Класс ваших элементов массива должен реализовывать интерфейс Parcelable. После этого вы можете использовать Intent.putParcelableArrayListExtra(ARRAY_LIST_KEY,fooArrayList) для отправки списка массивов, а затем Intent.getStringArrayListExtra(ARRAY_LIST_KEY) для получения списка

0 голосов
/ 15 сентября 2018

Привет, проверьте этот плагин Генератор Parcelable Code .

Это поможет вам автоматически сгенерировать готовый шаблон для класса POJO, а затем вы сможете напрямую использовать его, как это было предложено Abhishek. intent.putParcelableArrayListExtra(key_name, list);

0 голосов
/ 15 сентября 2018

Вы должны реализовать интерфейс Parcelable в классе MyQuote, а затем вы можете отправить его через намерение следующим образом: -

intent.putParcelableArrayListExtra (key_name, your_list);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...