Обновление определенного элемента в списке данных из класса RecyclerView.Adapter - PullRequest
0 голосов
/ 01 февраля 2019

Есть ли способ обновить определенные данные Списка из класса RecyclerView.Adapter

вот мой класс Списка:

public class Idea {
    private String id, name, voted;

    public Idea(String id, String name, String voted) {
        this.id = id;
        this.name = name;
        this.voted = voted;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getVoted() {
        return voted;
    }
}

мой класс адаптера RecyclerView:

public class IdeaListAdapter extends RecyclerView.Adapter<IdeaListAdapter.IdeaViewHolder> {

    private Context mCtx;
    private List<Idea> ideaList, idlst;

    public IdeaListAdapter(Context mCtx, List<Idea> ideaList) {
        this.mCtx = mCtx;
        this.ideaList = ideaList;
    }

    @NonNull
    @Override
    public IdeaListAdapter.IdeaViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.idea_list_object_layout, null);
        return new IdeaListAdapter.IdeaViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull IdeaListAdapter.IdeaViewHolder ideaViewHolder, int i) {
        final Idea idea = ideaList.get(i);

        if (idea.getVoted().equals("0")) {
            ideaViewHolder.checkBoxLikeIdeaListFragment.setChecked(false);
        } else if (idea.getVoted().equals("1")) {
            ideaViewHolder.checkBoxLikeIdeaListFragment.setChecked(true);
        }

        ideaViewHolder.checkBoxLikeIdeaListFragment.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b) {
                    *** Update my idea.getVoted() here ***
                } else {
                    *** Update my idea.getVoted() here ***
                }
            }
        });
        ideaViewHolder.textViewNameIdeaListFragment.setText(idea.getName());

    }

    @Override
    public int getItemCount() {
        return ideaList.size();
    }

    class IdeaViewHolder extends RecyclerView.ViewHolder {

        TextView textViewNameIdeaListFragment;
        CheckBox checkBoxLikeIdeaListFragment;

        public IdeaViewHolder(@NonNull View itemView) {
            super(itemView);

            textViewNameIdeaListFragment = (TextView) itemView.findViewById(R.id.textViewNameIdeaListFragment);
            checkBoxLikeIdeaListFragment = (CheckBox) itemView.findViewById(R.id.checkBoxLikeIdeaListFragment);
        }
    }

}

Я хотел бы обновить свой idea.getVoted (), когда пользователь щелкает checkBoxLikeIdeaListFragment Я не совсем уверен, как я буду использовать ideaList.set () в этой части.

я должен сделать это на своей MainActivity ?если да, пожалуйста, научите меня.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Создайте метод Setter в классе вашей модели **Idea** и получите доступ к методу setter для обновления данных.

Примерно так.

public class Idea {
    private String id, name, voted;

    public Idea(String id, String name, String voted) {
        this.id = id;
        this.name = name;
        this.voted = voted;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVoted() {
        return voted;
    }

    public void setVoted(String voted) {
        this.voted = voted;
    }
}

Используйте метод setter setVoted в вашем адаптерекласс.

ideaViewHolder.checkBoxLikeIdeaListFragment.setOnCheckedChangeListener(
            new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            i
            ideaList.get(i).setVoted("set your data"); //here you have to upadte the vote value.
            notifiyDatasetChanged(); 
        }
    });
0 голосов
/ 01 февраля 2019

Самый быстрый способ сделать это - передать OnCheckedListener в свой IdeaViewHolder конструктор и присвоить его checkBoxLikeIdeaListFragment.

Или в существующем коде вы можете:

ideaViewHolder.checkBoxLikeIdeaListFragment.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                   ideaList.get(i).setVoted(b); // i is the int index passed to onBindViewHolder(..)
                  IdeaListAdapter.this.notifyDatasetChanged(); //update list 


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