Tôi có một EditText
trong một Activity
nơi người dùng có thể nhập và tìm kiếm mọi thứ. Bên dưới thanh tìm kiếm, tôi có 2 tabs
được đính kèm với một số ViewPager
. Tôi đã thêm trình xử lý thay đổi sự kiện RxJava cho số EditText
vào 2 Fragments
mà tôi có cho các tab. Đây là mã có liên quan:Thay đổi sự kiện Fire RxJava chỉ khi Fragment hiển thị trong ViewPager
private Subscription subscription;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_people_search, container, false);
ButterKnife.bind(this, view);
LogUtil.i(TAG, "onCreateView called");
if (getActivity() != null) {
inputSearch = (EditText) getActivity().findViewById(R.id.editText11);
}
return view;
}
@Override
public void onResumeFragment() {
LogUtil.i(TAG, "onResumeFragment called");
if (subscription == null) {
doSearch();
}
}
private void doSearch() {
LogUtil.i(TAG, "doSearch called");
subscription = RxTextView.textChangeEvents(inputSearch)
.debounce(400, TimeUnit.MILLISECONDS)
.map(new Func1<TextViewTextChangeEvent, String>() {
@Override
public String call(TextViewTextChangeEvent textViewTextChangeEvent) {
return textViewTextChangeEvent.text().toString().trim();
}
})
.switchMap(new Func1<String, Observable<SearchUserData>>() {
@Override
public Observable<SearchUserData> call(String s) {
term = s;
if (previousTerm.equalsIgnoreCase(term) && TextUtils.isEmpty(term)) {
//do not reset pagination variables
} else if (!previousTerm.equalsIgnoreCase(term) && TextUtils.isEmpty(term)) {
min = 0;
max = 14;
} else if (previousTerm.equalsIgnoreCase(term) && !TextUtils.isEmpty(term)) {
//do not reset pagination variables
} else {
min = 0;
max = 14;
}
loadMoreOrNot = true;
previousTerm = term;
DiscoverAPI discoverAPI = restAdapter.create(DiscoverAPI.class);
return discoverAPI.getRxPeopleSearchResult(min, max, s, "user");
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getRxSearchObserver());
}
Những gì tôi muốn là, khi tôi tìm kiếm một cái gì đó, truy vấn nên đi vào backend chỉ cho tab được chọn ngay bây giờ, không phải cho tất cả các tab. Tôi có thể làm cái này như thế nào?
Tôi không hiểu chính xác những gì bạn muốn làm Nhưng ** setUserVisibleHint ** được gọi chỉ khi ViewPager hiển thị cho người dùng. – Amir
Tôi đã đặt thanh tìm kiếm trên thanh công cụ, khi bạn nhập bất kỳ thứ gì, bạn sẽ thấy kết quả trong 2 danh mục, con người và thư viện, tùy thuộc vào tab nào hiện được chọn. Vấn đề hiện tại là, bất cứ khi nào tôi gõ bất cứ điều gì, các yêu cầu tìm kiếm cho cả hai loại đều được kích hoạt. Tôi chỉ muốn truy vấn tìm kiếm cho tab đã chọn được kích hoạt. –
Hãy thử hủy đăng ký khỏi đăng ký trong onStop. – drivfe