2016-10-20 3 views
0

Ich habe eine DB mit dem Namen RealmItem und ich habe alle Benutzer haben Territorien sie sind angeschlossen. Welches ist n size unbekannt. Jeder Artikel hat ein Feld namens territory. Nun, gibt es eine Möglichkeit, Realm abzufragen, um alle Item Records zu finden, die einen der territoryID an den Benutzer angeschlossen hat. Der Grund, warum ich in der Notwendigkeit dieser bin, ist, weil ich Rohr ein AutoCompleteTextView einem Filteradapter, der wie folgt aussieht:Verwenden mehrerer unbekannter Anzahl von Bezeichnern zum Abfragen von RealmDB

public class ItemFilterAdapter extends BaseAdapter implements Filterable { 

    private static final String TAG = ItemFilterAdapter.class.getSimpleName(); 
    private Context mContext; 
    private List<RealmItem> mResult = new ArrayList<>(); 
    private LayoutInflater inflater; 
    private boolean needsFilter = false; 

    public ItemFilterAdapter(Context mContext) { 
     this.mContext = mContext; 
    } 

    public void setNeedsFilter(boolean needsFilter) { 
     this.needsFilter = needsFilter; 
    } 

    @Override 
    public int getCount() { 
     return mResult.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mResult.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     if (inflater == null) 
      inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (view == null) 
      view = inflater.inflate(R.layout.item_update_autocomplete, parent, false); 

     RealmItem item = mResult.get(position); 

     TextView updateName = (TextView) view.findViewById(R.id.update_name); 
     TextView updateAddress = (TextView) view.findViewById(R.id.update_address); 

     if (item != null) { 
      updateName.setText(item.getName()); 
      try { 
       JSONObject obj = new JSONObject(item.getPayload()); 
       String address = obj.getString("address"); 
       updateAddress.setText(address); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     return view; 
    } 

    @Override 
    public Filter getFilter() { 
     return new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence charSequence) { 
       return null; 
      } 

      @Override 
      protected void publishResults(CharSequence constraint, FilterResults filterResults) { 
       if (constraint != null) { 
        mResult = filterDealers(constraint.toString()); 
        notifyDataSetChanged(); 
       } else { 
        notifyDataSetInvalidated(); 
       } 
      } 
     }; 
    } 

    @NonNull 
    private List<RealmItem> filterDealers(String query) { 
     Realm mRealm = RealmUtils.getRealmInstance(mContext); 

     if (!needsFilter) { 
      return mRealm.where(RealmItem.class) 
        .contains("name", query, Case.INSENSITIVE) 
        .equalTo("id", [array of Ids]) <-- This is where I need it 
        .findAll(); 
     } else { 
      return mRealm.where(RealmItem.class) 
        .contains("name", query, Case.INSENSITIVE) 
        .notEqualTo("activeStatus", "inactive") 
        .equalTo("id", [array of Ids]) <-- This is where I need it 
        .findAll(); 
     } 
    } 
} 

Mehr wie die Suche nach so etwas wie dieses .equalTo("id", [array of Ids]) <-- This is where I need it oder etwas schön zu machen Filterung seemlessly glatt

Antwort

Verwandte Themen