SearchFragment - GachonCapstoneTeam/TTS_JAVA GitHub Wiki

๐Ÿ” SearchFragment

SearchFragment๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ฆฌํฌํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌํฌํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค. TabLayout, EditText, RecyclerView, Shimmer ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํƒ์ƒ‰/๊ฒ€์ƒ‰ UI ๋ฐ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


โœ… ์ฃผ์š” ๊ธฐ๋Šฅ ์š”์•ฝ

๊ธฐ๋Šฅ ์„ค๋ช…
๋ฆฌํฌํŠธ ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ ์ „์ฒด / ์ข…๋ชฉ / ์‚ฐ์—… ํƒญ์— ๋”ฐ๋ผ ์„œ๋ฒ„์—์„œ ๋ฆฌํฌํŠธ ๋ถ„๊ธฐ ์š”์ฒญ
๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ํ‚ค์›Œ๋“œ ์ž…๋ ฅ ํ›„ ์„œ๋ฒ„ ๊ฒ€์ƒ‰ API ํ˜ธ์ถœ๋กœ ํ•„ํ„ฐ๋ง๋œ ๋ฆฌํฌํŠธ ์ œ๊ณต
๋ฆฌ์ŠคํŠธ ๋ฌดํ•œ ์Šคํฌ๋กค ์Šคํฌ๋กค ํ•˜๋‹จ ๋„๋‹ฌ ์‹œ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ ๋กœ๋“œ
์ƒˆ๋กœ๊ณ ์นจ ์ง€์› SwipeRefreshLayout์œผ๋กœ ์ „์ฒด ๋ฆฌํฌํŠธ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ShimmerFrameLayout์œผ๋กœ ๋กœ๋”ฉ ์ค‘ UI ํ‘œ์‹œ
๋”๋ฏธ ๋ฐ์ดํ„ฐ ์„œ๋ฒ„ ์‘๋‹ต ์‹คํŒจ ์‹œ ๋”๋ฏธ ๋ฆฌํฌํŠธ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๊ฒ€์ƒ‰


๐Ÿ”ง ์ฃผ์š” ๋กœ์ง ์„ค๋ช…

๐Ÿงญ ํƒญ ํ•„ํ„ฐ ์ฒ˜๋ฆฌ - setupTabListener()

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        filterItemsByTab(tab.getPosition()); // ์ „์ฒด, ์ข…๋ชฉ, ์‚ฐ์—… ์ˆœ
    }
});

๐Ÿ”Ž ๊ฒ€์ƒ‰ ์‹คํ–‰ - performSearch()

searchButton.setOnClickListener(v -> {
    String query = searchInput.getText().toString().trim();
    if (!query.isEmpty()) {
        performSearch(query);
    }
});

๐Ÿงฉ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        if (!isLoading && lastVisibleItem + 1 >= totalItemCount) {
            loadNextPage();
        }
    }
});

๐Ÿ“ฆ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐ ๋ฐ˜์˜

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        List<Item> items = parseJsonAndAddItems(response.body().string());
        requireActivity().runOnUiThread(() -> {
            reportAdapter.setItems(items);
            shimmerFrameLayout.setVisibility(View.GONE);
            recyclerView.setVisibility(View.VISIBLE);
        });
    }
});

โœจ Shimmer ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ

shimmerFrameLayout.startShimmer();
LinearLayout shimmerLayout = view.findViewById(R.id.shimmer_linear);
for (int i = 0; i < 5; i++) {
    View skeletonView = inflater.inflate(R.layout.itembox_skeleton, shimmerLayout, false);
    shimmerLayout.addView(skeletonView);
}

๐Ÿ”— ๊ด€๋ จ ํด๋ž˜์Šค

  • ReportAdapter: SearchFragment์˜ RecyclerView ์–ด๋Œ‘ํ„ฐ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ