정책 검색 앱 개발: RecyclerView와 데이터 필터링 구현

정책 검색 애플리케이션의 핵심 기능을 구현하기 위해 데이터 모델, UI 컨트롤러, 어댑터를 단계별로 설계합니다. 아래는 검색 기능을 포함한 안드로이드 앱의 핵심 코드 예제입니다.

1. Policy 데이터 모델 클래스

public class Policy {
    private String title;
    private String content;

    public Policy(String title, String content) {
        this.title = title;
        this.content = content;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

2. MainActivity: 검색 로직과 RecyclerView 연동

public class MainActivity extends AppCompatActivity {
    private RecyclerView policyRecycler;
    private PolicyAdapter adapter;
    private List<Policy> fullPolicyList;
    private EditText searchInput;
    private ImageButton searchBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        policyRecycler = findViewById(R.id.policyRecycler);
        policyRecycler.setLayoutManager(new LinearLayoutManager(this));
        adapter = new PolicyAdapter(new ArrayList<>());
        policyRecycler.setAdapter(adapter);

        fullPolicyList = loadPolicies(); // 데이터베이스 또는 네트워크에서 정책 목록 로드

        searchInput = findViewById(R.id.searchInput);
        searchBtn = findViewById(R.id.searchBtn);
        searchBtn.setOnClickListener(view -> {
            String query = searchInput.getText().toString().trim();
            executeSearch(query);
        });
    }

    private void executeSearch(String keyword) {
        List<Policy> filteredList = new ArrayList<>();
        String lowerKeyword = keyword.toLowerCase();

        for (Policy p : fullPolicyList) {
            if (p.getTitle().toLowerCase().contains(lowerKeyword) ||
                p.getContent().toLowerCase().contains(lowerKeyword)) {
                filteredList.add(p);
            }
        }
        adapter.updateList(filteredList);
        adapter.notifyDataSetChanged();
    }

    private List<Policy> loadPolicies() {
        // 실제 구현에서는 Room, SQLite 또는 Retrofit을 사용하여 데이터 로드
        return new ArrayList<>();
    }
}

3. PolicyAdapter: RecyclerView 어댑터

public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder> {
    private List<Policy> items;

    public PolicyAdapter(List<Policy> items) {
        this.items = items;
    }

    public void updateList(List<Policy> newItems) {
        this.items = newItems;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View v = inflater.inflate(R.layout.item_policy, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Policy policy = items.get(position);
        holder.titleView.setText(policy.getTitle());
        holder.contentView.setText(policy.getContent());
    }

    @Override
    public int getItemCount() {
        return items != null ? items.size() : 0;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView titleView, contentView;

        ViewHolder(@NonNull View v) {
            super(v);
            titleView = v.findViewById(R.id.itemTitle);
            contentView = v.findViewById(R.id.itemContent);
        }
    }
}
위 구조는 Policy 객체를 생성하고, 사용자 입력 키워드로 제목과 내용을 필터링하며, RecyclerView를 통해 결과를 표시합니다. 실제 데이터 소스(로컬 DB 또는 API) 연결은 loadPolicies() 메서드에서 구현합니다.

태그: RecyclerView PolicyAdapter Android java 데이터필터링

7월 19일 17:40에 게시됨