RecyclerПросмотр некоторых любимых новостей не показывается.Когда я добавляю элемент в избранное, он иногда не появляется из-за столкновения позиций - PullRequest
0 голосов
/ 27 сентября 2019

FavouriteAdapter.java

public class FavouriteAdapter extends RecyclerView.Adapter<FavouriteAdapter.ViewHolder>{

    private final Context context;
    private ArrayList<FavouriteItems> favData;

    public FavouriteAdapter(ArrayList<FavouriteItems>favData, Context context){
        this.favData = favData;
        this.context = context;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.tab_two,parent,false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        final  FavouriteItems favouriteItems = favData.get(position);

        holder.titleTabTwo.setText(favouriteItems.getTitle());
        holder.descTabTwo.setText(favouriteItems.getDescription());
        holder.publishedAtTabTwo.setText(favouriteItems.getPublishedAt());
        Picasso.get().load(favouriteItems.getImageUrl()).placeholder(R.drawable.user_placeholder)
                .into(holder.imageNewsTabTwo);

        holder.btnExplore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(v.getContext(), ExploreNews.class);
                i.putExtra("newsUrl", favouriteItems.getDetailUrl());
                v.getContext().startActivity(i);
            }
        });

        holder.shareTabTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("text/plain");
                i.putExtra(Intent.EXTRA_TEXT, favouriteItems.getDetailUrl()+ "\n\nDownload DailyFeed for more exciting and instant news!");
                v.getContext().startActivity(i);
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView titleTabTwo,descTabTwo,publishedAtTabTwo;
        Button btnExplore;
        CheckBox likeTabTwo;
        ImageButton shareTabTwo;
        ImageView imageNewsTabTwo;
        LinearLayout layoutTabTwo;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            titleTabTwo = itemView.findViewById(R.id.titleTextView_tab_two);
            descTabTwo = itemView.findViewById(R.id.descTextView_tab_two);
            publishedAtTabTwo = itemView.findViewById(R.id.textViewPublishedAt_tab_two);
            btnExplore = itemView.findViewById(R.id.buttonExplore_tab_two);
            likeTabTwo = itemView.findViewById(R.id.likeCheckBox_tab_two);
            shareTabTwo = itemView.findViewById(R.id.sharebtn_tab_two);
            imageNewsTabTwo = itemView.findViewById(R.id.image_news_tab_two);
            layoutTabTwo = itemView.findViewById(R.id.layout_tab_two);

        }
    }
}

TabTwo.java

public class TabTwo extends Fragment {

    RecyclerView recyclerView;
    ArrayList<FavouriteItems> favData;
    FavouriteAdapter favouriteAdapter;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_2, container, false);
        recyclerView = v.findViewById(R.id.recycler_fragment_two);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        DailyFeedModel.open();
        favData = DailyFeedModel.showFavourites();
        DailyFeedModel.close();
        favouriteAdapter = new FavouriteAdapter(favData, getActivity());
        recyclerView.setAdapter(favouriteAdapter);

      return v;
    }


}

DailyFeedModel.java

 public static void insert(int position, String title, String desc, String imgUrl, String url, String date) {

        ContentValues cv = new ContentValues();
        cv.put(Keys.NEWS_ID,position);
        cv.put(Keys.NEWS_HEADER, title);
        cv.put(Keys.NEWS_DESC, desc);
        cv.put(Keys.NEWS_IMAGE_URL, imgUrl);
        cv.put(Keys.NEWS_URL, url);
        cv.put(Keys.NEWS_DATE, date);

        sqLiteDatabase.insert(Keys.TB_NAME, null, cv);
        Log.i("DEV", "VALUES INSERTED SUCCESSFULLY!!");

    }

    public static ArrayList<FavouriteItems> showFavourites() {

        ArrayList<FavouriteItems> favData = new ArrayList<>();
        sqLiteDatabase = dbHelper.getReadableDatabase();
        String sql = "SELECT * FROM " + Keys.TB_NAME;

        Cursor cr = sqLiteDatabase.rawQuery(sql, null);

        while (cr.moveToNext()) {
            String id = cr.getString(0);
            String title = cr.getString(3);
            String desc = cr.getString(2);
            String imgUrl= cr.getString(4);
            String url = cr.getString(1);
            String date = cr.getString(5);

            favData.add(new FavouriteItems(id,title,desc,imgUrl,url,date));
        }
        return favData;
    }

Когда я добавляю что-то на любимую вкладку,он добавляется, но если на главной странице есть еще одна новость, которую я хочу добавить в избранное, но она находится на той же позиции, что и новость в избранном, она не отображается.

Что я должен сделать, чтобы избежать этого столкновения позиций и убедиться, что все элементы добавляются друг под другом или что самый последний понравившийся элемент отображается первым?

...