добавить в избранное к новому виду деятельности - PullRequest
0 голосов
/ 22 октября 2018

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

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //recyclerview objects
    private RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String[] AuthorNames = new String[]{"Navagio Beach", "Anse Source d'Argent Beach", "As Catedrais Beach",
                "La Concha Beach", "Bondi Beach", "Nissi Beach"};

        String[] QuotesGuide = new String[]{"https://www.tripadvisor.com.my/Attraction_Review-g7777607-" +
                "d671779-Reviews-Navagio_Beach_Shipwreck_Beach-Anafonitria_Zakynthos_Ionian_Islands.html",
                "https://www.tripadvisor.com.my/Attraction_Review-g477968-d637885-Reviews-Anse_Source_D_Argent" +
                        "-La_Digue_Island.html",
                "https://www.tripadvisor.com.my/Attraction_Review-g609028-d1547522-Reviews-As_Catedrais_Beach-Ribadeo_" +
                        "Province_of_Lugo_Galicia.html",
                "https://www.tripadvisor.com.my/Attraction_Review-g187457-d675885-Reviews-La_Concha_Beach-San_Sebastian" +
                        "_Donostia_Province_of_Guipuzcoa_Basque_Country.html",
                "https://www.tripadvisor.com.my/Attraction_Review-g255060-d257354-Reviews-Bondi_Beach-Sydney_" +
                        "New_South_Wales.html",
                "https://www.tripadvisor.com.my/Attraction_Review-g262055-d1519581-Reviews-Nissi_Beach-Ayia_" +
                        "Napa_Famagusta_District.html"};

        RecyclerView myrv = findViewById(R.id.recyclerView);
        MyRecycleViewAdapter myAdapter = new MyRecycleViewAdapter( AuthorNames , QuotesGuide , MainActivity.this);
        myrv.setLayoutManager(new LinearLayoutManager(this));
        myrv.setAdapter(myAdapter);

        }}

MyQuote.java

public class MyQuote {
private String author;
private String quotedesc;
private int isLiked = 0;
//constructor initializing values
public MyQuote(String author, String quotedesc) {
    this.quotedesc = quotedesc;
    this.author = author;
}
//getters
public String getAuthor() {
    return author;
}
public int getIsLiked(){return isLiked;}
public String getQuotedesc() {
    return quotedesc;
}

public void setIsLiked(int isLiked) {
    this.isLiked = isLiked;
}

}

MyReclerViewadapter.java

public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.ViewHolder>{
private MyQuote myQuote;
    private String[] AuthorNames;
    private String[] QuotesGuide;
    private Context mCtx;

    public MyRecycleViewAdapter(String[] authorNames, String[] quotesGuide, Context mCtx) {
        AuthorNames = authorNames;
        QuotesGuide = quotesGuide;
        this.mCtx = mCtx;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.sample_quotecards, parent, false);


        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final MyRecycleViewAdapter.ViewHolder myholder, final int position) {
        myholder.tv_author.setText(AuthorNames[position]);
        myholder.tv_quote.setText(QuotesGuide[position]);

            myholder.im_favlike.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    //Show "Saved to favourite" toast
                    Toast.makeText(mCtx, " quote saved to favorites",
                            Toast.LENGTH_LONG).show();
                } else {
                    //Show "Removed from favourite"

                    Toast.makeText(mCtx, " quote removed from favorites",
                            Toast.LENGTH_LONG).show();
                }


            }


        });


        // share button of a recycler cardview
        myholder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.putExtra(Intent.EXTRA_TEXT, "share this quote"
                        + AuthorNames[myholder.getAdapterPosition()] +
                        "\nHere is the link to the full review: " + QuotesGuide[myholder.
                        getAdapterPosition()]);
                intent.setType("text/plain");
                mCtx.startActivity(Intent.createChooser(intent, "share this quote"));


            }
        });
    }


    @Override
    public int getItemCount() {
        return AuthorNames.length;
    }


    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView tv_author;
        public  CheckBox im_favlike;
        public TextView tv_quote;
        public ImageButton buttonViewOption;

        public ViewHolder(View itemView) {
            super(itemView);

            im_favlike = itemView.findViewById(R.id.likeimg);
            tv_author= itemView.findViewById(R.id.author_title);
            tv_quote= itemView.findViewById(R.id.quote_text);
            buttonViewOption = itemView.findViewById(R.id.imageViewOptions);
        }
    }
}

я хочу сделать следующее:

  1. всякий раз, когда я нажимаю на (чекбокс) избранное ... флажокизображение меняется .. и при обратном щелчке оно приходит к значению по умолчанию (не проверено) .. и оно работает нормально ... но проблема .. я не понимаю, как сохранить эти значения флажков ... когда пользователь выходит из приложения и открываетприложение снова мне нужно, чтобы сохранить значения Favorites..checkbox ..

  2. как хранить все избранные (карты котировок) ... отмеченные (отмеченные) пользователем в отдельномдеятельность ..

Я новичок в Android .. Я не знаю о общих предпочтениях .. Может кто-нибудь объяснить подробно шаг за шагом ... Что я должен делать .. этомне очень помогает ..

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Насколько я понимаю, вы хотите сохранить данные в общих настройках, если установлен флажок favourite .Чтобы сделать это, вы должны знать SharedPrefernces.

Перейдите по этой ссылке для сохранения данных в общих настройках. Пример общих настроек Android

Теперь, согласно вашему требованию, вы хотите сохранить Список класса вашей модели, т.е. Список MyQuote , есликнопка избранных отмечена

Следуйте этому для сохранения списков в SharedPreferences Сохранить ArrayList в SharedPreferences

Возвращаясь к проблеме сейчас, нам нужно сохранить и извлечь список из общих настроек.Для простоты я создам три метода: один для запуска списка MyQuote в настройках, второй для получения списка сохраненных MyQuote и последний для обновления списка сохраненных * 1023.* MyQuote

Gson gson = new Gson();


// create an empty list of MyQuote
public void initializeMyQuoteList(){
List<MyQuote> quoteList = new ArrayList<MyQuote>();
String jsonText = gson.toJson(quoteList);
prefsEditor.putString("MYQUOTE_LIST", jsonText);
prefsEditor.apply();
}


//getting quote list
public List<MyQuote> getQuoteList(){
 Type type = new TypeToken<List<MyQuote>>() {
    }.getType();
    return gson.fromJson(preferenceManager.getString("MYQUOTE_LIST",
            null), type);
}


//updating saved quote list
public void updateQuoteList(MyQuote quote){
 List<MyQuote> quoteList = getQuoteList();
quoteList.add(quote);
 String jsonText = gson.toJson(quoteList);
 prefsEditor.putString("MYQUOTE_LIST", jsonText);
 prefsEditor.apply();
}

Как только действие будет создано, инициализируйте пустой список, вызывая initializeMyQuoteList () всякий раз, когда нажимается кнопка любимый обновите список, добавив MyQuote в сохраненный список, т. е. вызвав updateQuoteList (quote) , здесь передайте объект MyQuote при нажатии на элемент.

Теперь мыиметь все сохраненные цитаты, просто вызовите getQuoteList () в новом действии, чтобы получить список сохраненных список MyQuote .

0 голосов
/ 22 октября 2018

Проверьте этот пример проекта

https://github.com/saini2sandeep/Favourite.git

Для показа тостов "Сохранено в избранном" и "Удалено из избранного" Вы можете сделать это так:

// Предположим, что likeButtonCB - ваш флажок, и вы должны установить для него слушателя, как показано ниже в коде:

 likeButtonCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if (isChecked) {
                           //Show "Saved to favourite" toast
                        } else {
                           //Show "Removed from favourite" toast
                        }
            }
        });

Теперь, чтобы изменить изображение кнопки «Нравится» при нажатии на нее, вы должны сделать рисованиефайл, подобный следующему: Вы можете назвать его в соответствии с тем, как я его называю, «like_button_background» здесь «ic_like_heart_button_color» - это изображение для рисования понравившейся кнопки, а «ic_like_heart_button_empty» - непохожее изображение.

  <?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/ic_like_heart_button_color" 
   android:state_checked="true" />
   <item android:drawable="@drawable/ic_like_heart_button_empty" />

Добавить этот файл вфон вашего флажка в xml-коде выглядит так:

<CheckBox
        android:id="@+id/like_button_cb"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_marginStart="@dimen/margin_left_gen_16"
        android:background="@drawable/like_button_background"
        android:button="@null"
        android:gravity="center"
        android:padding="@dimen/padding_gen_4"
        android:textSize="@dimen/tv_gen_16"
        android:theme="@style/checkBoxStyle"
        android:visibility="visible" />

Это решит ваши первые две проблемы.Чтобы сохранить подобное для отдельных карт, необходимо сохранить еще одно поле в классе модели "int isLiked = 0;"в классе модели и в соответствии с этим вы можете обновлять состояние кнопки «лайк» при заполнении пользовательского интерфейса.

Вы можете сделать это следующим образом: например, история - это ваша модель, а затем введите этот код в свой адаптер, заполняяданные карты.

 if (story.getIsLiked() == 1) {
            likeButtonCB.setChecked(true);
        } else {
            likeButtonCB.setChecked(false);
        }
...