【问题标题】:I use recycle view and Picasso but when update data to recycle view picasso not load picture android我使用回收视图和毕加索但是当更新数据以回收视图毕加索不加载图片android
【发布时间】:2018-10-03 06:05:20
【问题描述】:

毕加索没有加载图像。 这是我的代码屏幕截图:

当我在回收图像中滚动时不流畅 希望大家帮帮我

【问题讨论】:

  • 分享你的代码
  • 使其他视图也可见。即 holder.txtMessage.setVisiblity(View.VISIBLE); 在 if 块和相同的方式 holder.imgPic
  • 我不明白当我发布短信时,什么都没有发生,但是当图片未加载并隐藏了许多项目短信时,我发布了图片。所以你看到所有项目,你必须重新启动应用程序。希望你能帮助他们。非常感谢

标签: android image load picasso


【解决方案1】:

您可以在 recyclerview 中添加平滑滚动条以实现平滑滚动。您必须按照以下步骤操作:

1) 只需创建平滑滚动条。

RecyclerView.SmoothScroller smoothScroller = new LinearSmoothScroller(context) {
    @Override protected int getVerticalSnapPreference() {
         return LinearSmoothScroller.SNAP_TO_START;
    }
};

2) 将平滑滚动条设置为布局管理器,如下所示。

layoutManager.startSmoothScroll(smoothScroller);

现在一切就绪!!

你的recyclerview会平滑滚动。

希望对你有帮助!!

【讨论】:

  • 我不知道上下文是什么
【解决方案2】:

试试这个而不是你的代码,如果不是图像视图的高度为 0,则为图像视图设置固定高度,加载图像后尺寸会增加

if(message.getMessageType().equals(MesageType.Text)){
    holder.imgPic.setVisibility(View.GONE);
    holder.txtMessage.setVisibility(View.VISIBLE);
    holder.txtMessage.setText(message.getMessageText());
}else{
    holder.imgPic.setVisibility(View.VISIBLE);
    holder.txtMessage.setVisibility(View.GONE);
    holder.txtMessage.setText("");
    Picasso.with(context).load(message.getUrl_downloadd()).into(holder.imgPic);
}

Firebase 监听器:

/*Child listener for chat*/
private final ChildEventListener childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapShot, String s) {
        //append the message to exiting an displayed
        if (snapShot != null && snapShot.getValue() != null && !snapShot.getKey().equalsIgnoreCase("users")) {
            Message message = snapShot.getValue(Message.class);
            if (message != null && !messageKeys.contains(snapShot.getKey())) {
                messageKeys.add(snapShot.getKey());
                message.setKey(snapShot.getKey());
                //add your new message to adapter
            }
        }

    }

    @Override
    public void onChildChanged(DataSnapshot snapShot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot snapShot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
};
//value added listener for chat
private final ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot data) {
        List<Message> messages = new ArrayList<>();
        if (data != null && data.getValue() != null && data.getChildrenCount() > 0) {
            /*add all  messages to lis and displayed*/

            for (DataSnapshot snapShot : data.getChildren()) {
                if (snapShot != null && snapShot.getValue() != null && !snapShot.getKey().equalsIgnoreCase("users")) {
                    Message message = snapShot.getValue(Message.class);
                    if (message != null && !messageKeys.contains(snapShot.getKey())) {
                        messageKeys.add(snapShot.getKey());
                        message.setKey(snapShot.getKey());
                        messages.add(message);
                    }
                }
            }

        }
     //display your message on adapter

        //removed ValueEventListener from firebase
             getQueryForMessages().removeEventListener(this);
        //added child change listener to firebase
                   getQueryForMessages().addChildEventListener(childEventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
};

【讨论】:

  • 我没有设置高度图片但旧图片仍然存在,只有新图片隐藏发布
  • 我在评论 github.com/thangvynam/Android-/tree/master/AppChat/app/src/main 中有发布代码
  • 是的,我终于找到了缺少滚动的原因,您被逐一添加列表项并在每次缺少时通知您。所以使用事件监听器而不是子监听器。
  • 这意味着我应该使用 addValueEventListener 而不是 addChildEventListener 。但我真的不知道 addValueEventListener 和 addChildEventListener 之间的区别。你能给我解释一下吗?
  • 是的,ValueEventListener 将返回所有子项,因此您可以对其进行迭代,然后将其添加到您自己的列表中,然后您可以设置为您的适配器。 ChildEventListener 将为每个孩子触发。
猜你喜欢
  • 2017-06-15
  • 2017-10-30
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多