am having a bit of an issue with this activity, and it's weird because I am running the same code in another fragment and it's working just fine but for some reason on this activity it's really choppy when scrolling back up. at this point am not sure what to do then try to recode the activity to find the source of the problem. extending the layout manager to load 15 views in advance kind of help since I don't have to load it but its something with the adapter and the way its recycling the views
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_profile_posts);
mHostId = getIntent().getStringExtra("hostId");
mHostName = getIntent().getStringExtra("hostName");
mGroupId = getIntent().getExtras().getString("groupId");
mFirebaseStoragePosts = FirebaseStorage.getInstance("gs://enchanted-files");
mFirebaseStorageUserImg = FirebaseStorage.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
mFirebaseFireStore = FirebaseFirestore.getInstance();
mTitle = (TextView) findViewById(R.id.ID_home_following_seePost_Title);
mTitle.setText("Announcements");
mGoBack = (ImageButton) findViewById(R.id.ID_home_following_seePost_goBack);
mGoBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mLoadingLayout = (RelativeLayout) findViewById(R.id.ID_home_following_seePost_loadingView);
mNothingToShowLayout = (RelativeLayout) findViewById(R.id.ID_home_following_seePost_nothingToShowLayout);
mRecyclerView = (RecyclerView) findViewById(R.id.ID_seePost_recyclerView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(Group_Announcements_Activity.this);
linearLayoutManager.setItemPrefetchEnabled(true);
linearLayoutManager.setInitialPrefetchItemCount(15);
mRecyclerView.setLayoutManager(linearLayoutManager);
getGroupAnnouncements();
}
`
public class AnnouncementAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context mContext;
List<Post> listOfPost;
LayoutInflater mInflater;
public static final int withPic = 1;
public static final int withNoPic = 2;
public static final int withNoPic_byHost = 3;
public static final int withPic_byHost = 4;
private static final int withVideo = 5;
private static final int withVideoByHost = 6;
public AnnouncementAdapter(Context context, List<Post> list) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
listOfPost = new ArrayList<>(list);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case withPic:
View viewWithPic = mInflater.inflate(R.layout.recyclerview_item_post_with_pic, parent, false);
return new PostWithPicViewHolder(viewWithPic);
case withNoPic:
View viewWithNoPic = mInflater.inflate(R.layout.recyclerview_item_post_with_no_pic, parent, false);
return new PlainTextViewHolder(viewWithNoPic);
case withPic_byHost:
View viewWithPicByHost = mInflater.inflate(R.layout.recyclerview_item_post_with_pic_by_host, parent, false);
return new PostWithPicByHostViewHolder(viewWithPicByHost);
case withNoPic_byHost:
View viewWithNoPicByHost = mInflater.inflate(R.layout.recyclerview_item_post_with_no_pic_by_host, parent, false);
return new PlainTextByHostViewHolder(viewWithNoPicByHost);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
holder.setIsRecyclable(false);
switch (holder.getItemViewType()) {
case withPic:
PostWithPicViewHolder holderWithPic = (PostWithPicViewHolder) holder;
holderWithPic.onBind(listOfPost.get(position));
break;
case withNoPic:
PlainTextViewHolder holderWithNoPic = (PlainTextViewHolder) holder;
holderWithNoPic.onBind(listOfPost.get(position));
break;
case withPic_byHost:
PostWithPicByHostViewHolder holderWithPicByHost = (PostWithPicByHostViewHolder) holder;
holderWithPicByHost.onBind(listOfPost.get(position));
break;
case withNoPic_byHost:
PlainTextByHostViewHolder holderWithNoPicByHost = (PlainTextByHostViewHolder) holder;
holderWithNoPicByHost.onBind(listOfPost.get(position));
break;
}
}
@Override
public int getItemCount() {
return listOfPost.size();
}
public void removePost(int pos) {
listOfPost.remove(pos);
notifyItemRemoved(pos);
}
@Override
public int getItemViewType(int position) {
//if (position % 10 = 0 ) show AD
String type = listOfPost.get(position).getType();
switch (type) {
case "withPic":
return withPic;
case "withNoPic":
return withNoPic;
case "withNoPic_byHost":
return withNoPic_byHost;
case "withPic_byHost":
return withPic_byHost;
}
return 0;
}
}
public class PostWithPicByHostViewHolder extends RecyclerView.ViewHolder {
//user info
private String postedBy;
private ImageView profileImg;
private TextView profileName;
//post
private String postId;
private TextView postedOn;
private String postText;
private TextView postTextView;
private String postImgPath;
private ImageView postImg;
private TextView likedCount;
private ImageButton commentImg;
private TextView commentCount;
private ImageView optionsBtn;
private long CommentsCount;
private Options_Group_Announcement_Post_ByHost_Dialog dialog;
public PostWithPicByHostViewHolder(View itemView) {
super(itemView);
postedOn = (TextView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_timeStamp_by_host);
profileImg = (ImageView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_hostImage_by_host);
profileImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserProfile_Dialog dialog = UserProfile_Dialog.getDialogFragment(mHostId, mHostName, postedBy);
dialog.show(getSupportFragmentManager(), "");
}
});
profileName = (TextView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_hostName_by_host);
profileName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserProfile_Dialog dialog = UserProfile_Dialog.getDialogFragment(mHostId, mHostName, postedBy);
dialog.show(getSupportFragmentManager(), "");
}
});
postTextView = (TextView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_postText_by_host);
postImg = (ImageView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_postImage_by_host);
optionsBtn = (ImageView) itemView.findViewById(R.id.ID_recyclerView_postWitPic_postOptions_by_host);
optionsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.show(getSupportFragmentManager(), "");
}
});
likedCount = (TextView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_likeCount_TextView_by_host);
commentCount = (TextView) itemView.findViewById(R.id.ID_recyclerView_postWithPic_commentCount_textView_by_host);
commentImg = (ImageButton) itemView.findViewById(R.id.ID_recyclerView_postWithPic_commentImgView_by_host);
commentImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Group_Announcements_Activity.this, Group_Announcement_Comments_Activity.class);
intent.putExtra("hostId", mHostId);
intent.putExtra("hostName", mHostName);
intent.putExtra("groupId", mGroupId);
intent.putExtra("postId", postId);
startActivity(intent);
}
});
}
public void onBind(Post post) {
String nameStr = post.getPostProfileName();
String name = nameStr.substring(0, 1).toUpperCase() + nameStr.substring(1);
profileName.setText(name);
postId = post.getPostId();
postedOn.setText(post.getPostedDate());
postedBy = post.getPostedBy();
postTextView.setText(post.getPostText());
postImgPath = post.getPostImagePath();
likedCount.setText(Integer.toString(post.getLikedCount()));
String postString = post.getPostText();
if (postString != null) {
postText = postString;
} else {
postText = "";
}
getPostLikes(new FireBaseCallback() {
@Override
public void callBack(Map map) {
likedCount.setText(CompactNumberConverter.formatValue((long) map.get("likesCount")));
}
});
getCommentsCount(new FireBaseCallback() {
@Override
public void callBack(Map map) {
commentCount.setText(CompactNumberConverter.formatValue((long) map.get("totalComments")));
}
});
getImages();
dialog = Options_Group_Announcement_Post_ByHost_Dialog.getDialogFragment(mHostId, mGroupId, postId, postImgPath, postText, "imagePost");
dialog.setDismissListener(new Dialog_Dismiss_Listener() {
@Override
public void simpleClose() {
}
@Override
public void updateList_and_Close() {
mAdapter.removePost(getAdapterPosition());
Toast.makeText(Group_Announcements_Activity.this, "Post was removed", Toast.LENGTH_LONG).show();
}
@Override
public void updateText_and_Close(String newText) {
if (newText != null && !newText.isEmpty()) {
Toast.makeText(Group_Announcements_Activity.this, "Post Updated", Toast.LENGTH_LONG).show();
postTextView.setVisibility(View.VISIBLE);
postTextView.setText(newText);
reConfigureEditDialog(newText);
} else {
Toast.makeText(Group_Announcements_Activity.this, "Post Updated", Toast.LENGTH_LONG).show();
postTextView.setVisibility(View.GONE);
reConfigureEditDialog(newText);
}
}
});
}
private void reConfigureEditDialog(String newText2) {
dialog = null;
dialog = Options_Group_Announcement_Post_ByHost_Dialog.getDialogFragment(mHostId, mGroupId, postId, postImgPath, newText2, "imagePost");
dialog.setDismissListener(new Dialog_Dismiss_Listene
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…