1

Могу ли я уведомить адаптер об изменении запроса? Как теперь он ничего не делает ... кто-нибудь?Кто-нибудь знает, может ли Firebase уведомить адаптер о запросе.

05-28 17: 04: 07,358 15585-15674/com.example.rasmusjosefsson.rjcar D/OpenGLRenderer: endAllStagingAnimators на 0x7ff46e405c00 (ListPopupWindow $ DropDownListView) с ручкой 0x7ff46f3d1b00

OnCreate()

private DatabaseReference mUserRef; 
private String mTravelTypeSelected; 
private Query queryRefSelected; 
private FirebaseRecyclerAdapter<MyWaypoint, LatLngViewHolder> mFirebaseRecyclerViewAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 

    //*************** TRAVEL SPINNER**************// 
    mSpinnerTravelType = (Spinner) findViewById(R.id.spinner_nav); 

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.traveltype_array, R.layout.spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    mSpinnerTravelType.setAdapter(adapter); 

    mSpinnerTravelType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      if (position == 0) { 
       queryRefSelected = mUserRef; 
      } else if (position == 1) { 
       queryRefSelected = mUserRef.orderByChild("travelType").equalTo("Work"); 
       mTravelTypeSelected = "Work"; 
       Log.i("TEST", position + " "); 

      } else if (position == 2) { 
       queryRefSelected = mUserRef.orderByChild("travelType").equalTo("Private"); 
       Log.i("TEST", position + " "); 
      } 
      mFirebaseRecyclerViewAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

    recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(false); 
    LinearLayoutManager manager = new LinearLayoutManager(this); 
    manager.setReverseLayout(false); 
    recyclerView.setLayoutManager(manager); 
} 

RecyclerViewAdapter

private void attachRecyclerViewAdapter() { 

    mFirebaseRecyclerViewAdapter = new FirebaseRecyclerAdapter<MyWaypoint, LatLngViewHolder>(MyWaypoint.class, R.layout.list_item, LatLngViewHolder.class, queryRefSelected) { 
     @Override 
     protected void populateViewHolder(final LatLngViewHolder latLngViewHolder, MyWaypoint item, final int i) { 

      Log.i("SELECTED INSIDE POP", queryRefSelected.toString()); 

      String locA = item.getOrigin(); 
      latLngViewHolder.locationA.setText(locA); 

      String locB = item.getDestination(); 
      latLngViewHolder.locationB.setText(locB); 

      String distance = item.getDistance(); 
      latLngViewHolder.distance.setText(distance); 

      final String duration = item.getDuration(); 

     } 
    }; 
    recyclerView.setAdapter(mFirebaseRecyclerViewAdapter);  
} 

OnStart

@Override 
public void onStart() { 
    super.onStart(); 
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    if (user != null) { 

     // User is signed in 
     String mUserId = user.getUid(); 

     // String userUrl = Constants.FIREBASE_URL + "https://stackoverflow.com/users/" + mUserId + "/waypoints"; 
     String userUrl = "https://rjcar3.firebaseio.com/users/lP1K8Ik0zrhaXD6AR6C0x7ozi5g2/waypoints"; 
     mUserRef = FirebaseDatabase.getInstance().getReferenceFromUrl(userUrl); 

     // Set standard query 
     queryRefSelected = mUserRef; 

     // attaching the adapter 
     attachRecyclerViewAdapter(); 
    } 
} 

ответ

2

Вы звоните mFirebaseRecyclerViewAdapter.notifyDataSetChanged(), которые будут говорить только RecyclerView освежить взгляды он уже есть.

Если вы хотите изменить базовый запрос адаптера, вам нужно будет снова позвонить attachRecyclerViewAdapter(), чтобы воссоздать адаптер с новым Query. Если вы сделаете это, обязательно вызовите mFirebaseRecyclerViewAdapter.cleanup() на старый адаптер.

+0

Ох я вижу, спасибо большое! –

+0

Offtopic: Можно ли комбинировать два запроса? Месяц выбран (12 элементов) и тип путешествия (2 элемента). Или лучше хранить его в базе данных, узел для частного и один для работы? –

+0

Вы можете использовать только один запрос, всегда лучше сделать ваши данные в базе данных похожими на то, как вы хотите запросить его, а не пытаться делать сложные вещи на стороне клиента. Это уменьшит количество загружаемых файлов и ускорит их работу. –

 Смежные вопросы

  • Нет связанных вопросов^_^