정책 검색 애플리케이션의 핵심 기능을 구현하기 위해 데이터 모델, 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() 메서드에서 구현합니다.