如何使用RealmRecyclerViewAdapter设置所需的数据

时间:2017-06-23 11:40:10

标签: android android-recyclerview realm

  

我想设置所需的用户(视图),但它显示所有数据

注意:邀请是按钮的默认文字

解释

  
      
  1. 列表有50个联系人。其中5个已注册+其次是登录联系人和其他5个仅注册和剩余40个联系人所以我想只显示跟随+注册联系人这意味着只有10个联系人想要设置为recyclerviews
  2.         

    所以,我面临的问题是它向Recyclerview显示了所有50个联系人

公共类FollowAdapter扩展了RealmRecyclerViewAdapter {

private Realm realm;
private Context context;
private ActionListener actionListener;
private InviteListener inviteListener;
private String TAG = getClass().getName();

public void setActionListener(ActionListener actionListener) {
    this.actionListener = actionListener;
}

public void setInviteListener(InviteListener inviteListener) {
    this.inviteListener = inviteListener;
}


public FollowAdapter(Context context, Realm realm, OrderedRealmCollection<ContactClass> airports) {
    super(context, airports, true);
    this.realm = realm;
    this.context = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.follow_item, parent, false);
    Holder holder = new Holder(view);
    return holder;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    final ContactClass contactClass = getData().get(position);
    Holder mHolder = (Holder) holder;

    if (contactClass.getIsRegister() != null && contactClass.getIsRegister() && contactClass.getIsFollow() != null && contactClass.getIsFollow()) {
        mHolder.follow.setText(context.getString(R.string.unfollow));
        mHolder.contactName.setText(contactClass.getName());
        mHolder.contactNumber.setText(contactClass.getNumber());
        Drawable drawable = ResourcesCompat.getDrawable(holder.itemView.getContext().getResources(), R.drawable.camera, null);
        if (!contactClass.getAvatar().equals("") && contactClass.getAvatar() != null) {
            Glide.with(holder.itemView.getContext()).load(contactClass.getAvatar()).into(mHolder.contact_pic).onLoadFailed(drawable);
        } else {
            int color = holder.itemView.getContext().getResources().getColor(R.color.universal);
            ColorFilter cf = new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY);
            mHolder.contact_pic.setColorFilter(cf);
            // Drawable mDefaultBackground = holder.itemView.getContext().getResources().getDrawable(R.drawable.app_icon);
            mHolder.contact_pic.setImageDrawable(drawable);
        }

    } else if (contactClass.getIsFollow() != null && !contactClass.getIsFollow() && contactClass.getIsRegister() != null && contactClass.getIsRegister()) {
        mHolder.follow.setText(context.getString(R.string.follow));
        mHolder.contactName.setText(contactClass.getName());
        mHolder.contactNumber.setText(contactClass.getNumber());
        Drawable drawable = ResourcesCompat.getDrawable(holder.itemView.getContext().getResources(), R.drawable.camera, null);
        if (!contactClass.getAvatar().equals("") && contactClass.getAvatar() != null) {
            Glide.with(holder.itemView.getContext()).load(contactClass.getAvatar()).into(mHolder.contact_pic).onLoadFailed(drawable);
        } else {
            int color = holder.itemView.getContext().getResources().getColor(R.color.universal);
            ColorFilter cf = new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY);
            mHolder.contact_pic.setColorFilter(cf);
            // Drawable mDefaultBackground = holder.itemView.getContext().getResources().getDrawable(R.drawable.app_icon);
            mHolder.contact_pic.setImageDrawable(drawable);
        }
    }



}


}

private class Holder extends RecyclerView.ViewHolder {
    ImageView contact_pic;
    TextView contactName, contactNumber;
    AppCompatButton follow;

    public Holder(View itemView) {
        super(itemView);
        contact_pic = itemView.findViewById(R.id.contact_pic);
        contactName = itemView.findViewById(R.id.contact_name);
        contactNumber = itemView.findViewById(R.id.contact_number);
        follow = itemView.findViewById(R.id.btn_follow);
        contactName.setSelected(true);
        contactNumber.setSelected(true);
    }
}



public interface ActionListener {
    void actionListener(Boolean action, User user);

}

public interface InviteListener {
    void inviteListener(String phone);

}

}

  

你可以看到上面的代码我只设置了注册+跟随(那5个联系人)并注册了5个联系人但问题是它设置了所有50个联系人。

设置数据到适配器

Realm realm1 = Realm.getDefaultInstance();
        RealmResults<ContactClass> realmResults = realm1.where(ContactClass.class).findAllAsync();
        followAdapter = new FollowAdapter(getApplicationContext(), realm1, realmResults);
        recyclerview_followed.setAdapter(followAdapter);

contactClass.class

public class ContactClass extends RealmObject implements Serializable {
    String id;
    String name;
    @PrimaryKey
    String number;
    String avatar;
    double followers;
    double Followings;
    Boolean isRegister;
    Boolean isFollow;

    public Boolean getIsRegister() {
        return isRegister;
    }

    public void setIsRegister(Boolean register) {
        isRegister = register;
    }

    public Boolean getIsFollow() {
        return isFollow;
    }

    public void setIsFollow(Boolean follow) {
        isFollow = follow;
    }

    public double getFollowers() {
        return followers;
    }

    public void setFollowers(double followers) {
        this.followers = followers;
    }

    public double getFollowings() {
        return Followings;
    }

    public void setFollowings(double followings) {
        Followings = followings;
    }


    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }


    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }


    public ContactClass() {
    }


    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;
    }

result i got

更新了领域过滤器

 RealmResults<ContactClass> realmResults = realm1.where(ContactClass.class).equalTo("isRegister", true).equalTo("isFollow", true).findAllAsync();
  

上面的代码将给出所有isRegister = true,isFollow = true所以我能够设置所有用户跟随用户和设置文本取消关注但是我也想要isRegister = true,isFollow = false用户想要设置要跟随的文本我尝试了以下过滤器但没有得到任何结果。

RealmResults<ContactClass> realmResults = realm1.where(ContactClass.class).equalTo("isRegister", true).equalTo("isFollow", true).equalTo("isRegister", false).findAllAsync();

2 个答案:

答案 0 :(得分:1)

您正在寻找

RealmResults<ContactClass> realmResults = 
    realm.where(ContactClass.class)
         .equalTo("isRegister",  true)
         .findAllAsync();

您可能希望按属性使用findAllSortedAsync(),以便进行一致的集合更改。

答案 1 :(得分:0)

要仅提取注册用户列表,您需要使用以下命令更新您的查询:

RealmResults<ContactClass> realmResults = realm.where(ContactClass.class).equalTo("isRegister", true).findAllAsync();

为此:

  

上面的代码将给出所有isRegister = true,isFollow = true所以我能够   设置所有用户跟随用户和设置文本取消关注但我也想要   isRegister = true,isFollow = false用户希望设置要遵循的文本   我试过在过滤器下面但没有得到任何结果。

使用此:

RealmResults<ContactClass> realmResults = realm1.where(ContactClass.class).equalTo("isRegister", true).equalTo("isFollow", false).findAllAsync();

让我知道,这有助于你。