이제 이 앱의 가장 중요한 기능인 "이름으로 찾기", "번호로 찾기", "전체 목록" 을 구현해보자.
1. 이름으로 찾기
방법
입력 문자가 공백이면 탐색을 하지 않는다. (공백은 어느 문자열이든 다 포함되어 있기 때문에)
입력 문자를 공백을 기준으로 분리하고, s[1]에 분리된 문자가 포함되어 있으면 그 리스트의 모든 데이터를 CustomListItem에 묶어서 FindResult에 넣어준다.
탐색을 다 끝냈으면 리스트뷰를 CustomAdapter와 연결하여 화면에 보여준다.
소스코드
//이름으로 찾기
public void OnFindNameClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
String tempString = text.getText().toString();
tempString = tempString.replaceAll(" ", "");
tempString = tempString.replaceAll("\\p{Z}", "");
//문자가 그냥 공백이 아니라면
if(tempString.length() != 0) {
String[] temp = text.getText().toString().split(" ");
for (String[] s : booklist_for_activity) {
int flag = 0;
for (String find : temp) {
if (!s[1].contains(find)) {
flag = 1;
break;
}
}
if (flag == 0) {
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
}
1. 번호로 찾기
방법
이름으로 찾기와 거의 똑같지만 번호의 경우 여러개를 탐색하지 않으므로 문자열의 공백을 전부 제거해서 해당 숫자가 포함된 경우만 찾아준다.
소스코드
//번호로 찾기
public void OnFindNumberClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
String tempString = text.getText().toString();
tempString = tempString.replaceAll(" ", "");
tempString = tempString.replaceAll("\\p{Z}", "");
if(tempString.length() != 0) {
for (String[] s : booklist_for_activity) {
int flag = 0;
if (s[0].equals(tempString)){
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
}
3. 전체 목록 출력하기
방법
가장 간단하다. 찾는 과정을 없애고 CSVParsing에서 가져온 데이터 리스트를 전부 출력해주기만 하면 된다.
소스코드
//전체 책 목록 보기
public void OnFindAllListrClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
for (String[] s : booklist_for_activity) {
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
전체 코드는 아래와 같다.
소스코드
package com.example.bethanylibrary;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
public class LibraryView extends AppCompatActivity {
ArrayList booklist_for_activity = new ArrayList();
CSVParsing parser_for_activity = new CSVParsing();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_library_view);
//CSVParsing에서 파싱한 리스트 가져오
booklist_for_activity.addAll(parser_for_activity.getBook());
}
//이름으로 찾기
public void OnFindNameClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
String tempString = text.getText().toString();
tempString = tempString.replaceAll(" ", "");
tempString = tempString.replaceAll("\\p{Z}", "");
//문자가 그냥 공백이 아니라면
if(tempString.length() != 0) {
String[] temp = text.getText().toString().split(" ");
for (String[] s : booklist_for_activity) {
int flag = 0;
for (String find : temp) {
if (!s[1].contains(find)) {
flag = 1;
break;
}
}
if (flag == 0) {
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
}
//번호로 찾기
public void OnFindNumberClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
String tempString = text.getText().toString();
tempString = tempString.replaceAll(" ", "");
tempString = tempString.replaceAll("\\p{Z}", "");
if(tempString.length() != 0) {
for (String[] s : booklist_for_activity) {
int flag = 0;
if (s[0].equals(tempString)){
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
}
//전체 책 목록 보기
public void OnFindAllListrClick(View v){
EditText text = (EditText)findViewById(R.id.NameOrNumber);
ListView find_list = (ListView)findViewById(R.id.findlistresult);
ArrayList FindResult = new ArrayList<>();
for (String[] s : booklist_for_activity) {
CustomListItem CItem = new CustomListItem();
CItem.name = s[1];
CItem.number = s[0];
CItem.position = s[2];
FindResult.add(CItem);
}
CustomAdapter adapter = new CustomAdapter(FindResult);
find_list.setAdapter(adapter);
}
}
댓글
댓글 쓰기