[베다니 도서관] 5. 찾기 버튼을 구현해보자



이제 이 앱의 가장 중요한 기능인 "이름으로 찾기", "번호로 찾기", "전체 목록" 을 구현해보자.


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);

    }


}

댓글