Listview项目在Android中滚动时更改..如何避免它?

时间:2017-09-21 04:42:32

标签: android listview android-studio messages

我一直在开发一个使用firebase发送和接收消息的应用程序,当所有消息都在同一侧时,消息显得干净整洁。

Adaptar:

find . -type f -name "*.sw[klmnop]" -delete

但是我想让用户在右侧拥有自己的消息,所以写了一个代码,它在下面用粗体表示工作正常,滚动时所有转移到右侧...尝试覆盖getviewcounttype但不能正确实现...任何改变代码或防止项目转移的解决方案..

This Image is working fine at first

Upon Scroll all gets moved to right

这是上述更改的代码

     @Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
    }
        ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
        TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
        TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
        LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.image_container);
        FriendlyMessage message = getItem(position);
        boolean isPhoto = message.getPhotoUrl() != null;
        if (isPhoto) {
            messageTextView.setVisibility(View.GONE);
            layout.setVisibility(View.VISIBLE);
            layout.setMinimumHeight(200);
            photoImageView.setVisibility(View.VISIBLE);
            Glide.with(photoImageView.getContext())
                    .load(message.getPhotoUrl())
                    .into(photoImageView);
        } else {
            messageTextView.setVisibility(View.VISIBLE);
            photoImageView.setVisibility(View.GONE);
            layout.setVisibility(View.GONE);
            layout.setMinimumHeight(0);
            messageTextView.setText(message.getText());
        }


        messageTextView.setText(message.getText());
        authorTextView.setText("." + message.getName());


    return convertView;

对此问题有任何可能的解决办法???

2 个答案:

答案 0 :(得分:3)

请在适配器中使用setTag()和getTag(), 但更好的做法是使用RecyclerView代替ListView

答案 1 :(得分:1)

您需要添加else语句,因为ListView重用了其项目视图。一旦您将视图设置为右侧,它就无法自行将其对齐方式更改为左侧。

if (user.getDisplayName().equalsIgnoreCase(message.getName())) {
    System.out.println("At Gravity" + user.getDisplayName().toString() + message.getName());
    messageTextView.setGravity(Gravity.RIGHT);
    authorTextView.setGravity(Gravity.RIGHT);
    layout.setGravity(Gravity.RIGHT);
    messageTextView.setMaxWidth(200);
    authorTextView.setTextColor(Color.CYAN);
}else{
    messageTextView.setGravity(Gravity.LEFT);
    authorTextView.setGravity(Gravity.LET);
    layout.setGravity(Gravity.LEFT);
    messageTextView.setMaxWidth(200);
    authorTextView.setTextColor(Color.CYAN);
}