Ваша проблема в том, что вы не должны создавать два объекта RealmObject для этой задачи. Вы должны создать один объект RealmObject.
public class HashtagObject extends RealmObject
public class SearchtagObject extends RealmObject
Они должны быть
public class TagObject extends RealmObject {
@Index
private String type; //HASHTAG or SEARCHTAG
Если вам все еще нужно, чтобы показать их отдельно, то вам нужно два результата, в этом случае вам обязательно нужно свой собственный адаптер.
Для этого я бы рекомендовал несколько отразить то, что делает RealmRecyclerViewAdapter
.
public class SearchAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
RealmResults<HashtagObject> hashtags;
RealmResults<SearchtagObject> searchtags;
Realm realm;
RealmChangeListener realmChangeListener = new RealmChangeListener() {
@Override
public void onChange(Object element) {
notifyDataSetChanged();
}
}
public SearchAdapter(Realm realm) {
this.hashtags = realm.where(HashTagObject.class).findAllAsync();
this.searchtags = realm.where(SearchtagObject.class).findAllAsync();
this.hashtags.addChangeListener(realmChangeListener);
this.searchtags.addChangeListener(realmChangeListener);
}
private <T extends RealmModel> int getResultSize(RealmResults<T> results) {
return ((results == null) || (!results.isValid()) || (results.isValid() && !results.isLoaded()) ? 0 : results.size();
}
@Override
public int getItemCount() {
return 1 /* header */ + getResultSize(hashtags) + 1 /* header */ + getResultSize(searchtags);
}
static final int HEADER = 0;
static final int HASH = 1;
static final int SEARCH = 2;
@Override
public int getItemViewType(int position) {
if(position == 0 || position == 1 /*header*/ + getResultSize(hashtags)) {
return HEADER;
}
if(position < 1 /*header*/ + getResultSize(hashtags)) {
return HASH;
}
return SEARCH;
}
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == HEADER) {
return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.search_header, parent, false));
}
if(viewType == HASH) {
return new HashtagViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.search_hash, parent, false));
}
if(viewType == SEARCH) {
return new SearchViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.search_search, parent, false));
}
throw new IllegalArgumentException("Invalid view type [" + viewType + "]");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder abstractHolder, int position) {
if(abstractHolder instanceof HeaderViewHolder) {
HeaderViewHolder holder = (HeaderViewHolder) abstractHolder;
if(position == 0) {
holder.setText(R.string.hash_header_text);
} else {
holder.setText(R.string.search_header_text);
}
} else if(abstractHolder instanceof HashtagViewHolder) {
HashtagViewHolder holder = (HashtagViewHolder) abstractHolder;
HashtagObject hashObject = hashtags.get(position - 1 /*header*/);
holder.bind(hashObject);
} else if(abstractHolder instanceof SearchViewHolder) {
SearchViewHolder holder = (SearchViewHolder)abstractHolder;
SearchtagObject searchObject = searchTags.get(
position - 1 /* header */
- 1 /* other header */
- getResultSize(hashtags) /* previous list */);
holder.bind(searchObject);
}
}
}
Это полностью зависит от того, как вы собираетесь показать две совершенно разные RealmObjects в том же 'ListView', учитывая AFAIK Realm [не поддерживает общие RealmObjects] (https://github.com/realm/realm- java/issues/2265), и в настоящее время вы предоставляете только набор ** адаптера ** **, который может принадлежать только ** одному ** RealmObject. – EpicPandaForce
В вашем случае решение наиболее определенно состоит в том, что эти два объекта RealmObject должны быть одним объектом RealmObject. – EpicPandaForce
Мои объекты RealmObject отличаются только одной переменной, поэтому не стоит использовать адаптер onne. Но если я не могу использовать RealmBaseAdapter с общим я имею только один способ использования двух адаптеров? Я полагаю, что это не так хорошо. – Delphian