3 분 소요

데이터베이스를 리스트뷰에서 보이도록 해보겠습니다.

데이터베이스를 리스트뷰와 연동시키는 부분이 조금 어려웠는데

구글링도 해보고 안드로이드스튜디오 도큐먼트문서도 찾아보면서 하나씩 만들어갔습니다..

일정 글 리스트를 보여줄 준비

일정 메인화면에서 리스트뷰를 보여줄 코드를 작성하고

리스트뷰 어댑터와 Getter/Setter를 작성해보겠습니다.

DiaryActivity.java

package com.example.mydiary;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

public class DiaryActivity extends AppCompatActivity {

    private ImageButton button_home;
    private Button button_GotoAddList;
    private EditText searchTitle;

    public ListView lvList = null;
    public DBHelper helper = new DBHelper(this);

    ListViewAdapter adapter = new ListViewAdapter();

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

        initView();
        displayList();
        lvList.setAdapter(adapter);

        //홈 버튼
        button_home.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent goHome = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(goHome);
                finish();
            }
        });

        //글 쓰기 화면 이동
        button_GotoAddList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent GotoAddList = new Intent(getApplicationContext(),DiaryAddActivity.class);
                startActivity(GotoAddList);
                finish();
            }
        });
    }

    //뷰 초기화
    public void initView(){
        lvList = findViewById(R.id.lv_list);
        searchTitle = findViewById(R.id.searchTitle);
        button_home = findViewById(R.id.button_home);
        button_GotoAddList = findViewById(R.id.button_GotoAddList);
    }

    //화면에 db 띄우기
    public void displayList(){
        SQLiteDatabase database = helper.getReadableDatabase();
        //목록 가져오기
        Cursor cursor = database.rawQuery("SELECT * FROM DIARY ORDER BY title ASC",null);

        //목록의 개수만큼 반복하며 Add
        while(cursor.moveToNext()){
            //제목, 글 내용 순서
            adapter.addItemToList(cursor.getString(0),cursor.getString(1));
        }
    }

}

ListViewAdapter.java

package com.example.mydiary;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class ListViewAdapter extends BaseAdapter {

    //원본 데이터 리스트(어댑터에 추가된 데이터를 저장하기위한 ArrayList)
    private ArrayList<ListViewAdapterData> list = new ArrayList<ListViewAdapterData>();


    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        final Context context = viewGroup.getContext();

        //리스트뷰에 아이템이 없을 때
        if(view == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item_listview,viewGroup,false);
        }

        //객체들을 찾아 가져옴
        TextView tvTitle = (TextView)view.findViewById(R.id.item_tv_Title);
        //TextView tvContent = (TextView)view.findViewById(R.id.item_tv_Content);

        //현재 위치의 list배열에서 객체를 가져온다.
        ListViewAdapterData listdata = list.get(i);

        return view;
    }

    //list에 아이템 추가
    public void addItemToList(String title, String content){
        ListViewAdapterData listdata = new ListViewAdapterData();

        listdata.setTitle(title);
        listdata.setContent(content);

        list.add(listdata);

    }
}

ListViewAdapterData.java

package com.example.mydiary;

public class ListViewAdapterData {

    private String title;
    private String 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;
    }
}

연락처 리스트를 보여줄 준비

PhoneBookActivity.java

package com.example.mydiary;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

public class PhoneBookActivity extends AppCompatActivity {
    private ImageButton button_home;
    private Button button_GotoAddPhone;
    private EditText searchName;


    public ListView lvList1;
    public DBHelper1 helper = new DBHelper1(this);

    ListViewAdapter1 adapter = new ListViewAdapter1();

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

        initViews();
        displayList();
        lvList1.setAdapter(adapter);

        //홈 버튼클릭
        button_home.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent goBack = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(goBack);
                finish();
            }
        });

        //연락처추가 버튼클릭
        button_GotoAddPhone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent GotoAddPhone = new Intent(getApplicationContext(),PhoneBookAddActivity.class);
                startActivity(GotoAddPhone);
                finish();
            }
        });
    }

    //뷰 초기화
    public void initViews(){
        lvList1 = findViewById(R.id.lv_list1);
        searchName = findViewById(R.id.searchName);
        button_home = findViewById(R.id.button_home);
        button_GotoAddPhone = findViewById(R.id.button_GotoAddPhone);
    }

    //화면에 db 띄우기
    public void displayList(){
        SQLiteDatabase database = helper.getReadableDatabase();

        //목록 가져오기
        Cursor cursor = database.rawQuery("SELECT * FROM PHONEBOOK ORDER BY name ASC",null);

        //목록의 개수만큼 반복하며 Add
        while(cursor.moveToNext()){
            //제목, 글 내용 순서
            adapter.addItemToList(cursor.getString(0),cursor.getString(1));
        }

    }
}

ListViewAdater1.java

package com.example.mydiary;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class ListViewAdapter1 extends BaseAdapter {

    //원본 데이터 리스트
    private ArrayList<ListViewAdapterData1> list1 = new ArrayList<ListViewAdapterData1>();

    @Override
    public int getCount() {
        return list1.size();
    }

    @Override
    public Object getItem(int i) {
        return list1.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        final Context context = viewGroup.getContext();

        //리스트뷰에 아이템이 없을 때
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item_listview1, viewGroup, false);
        }

        //객체들을 찾아 가져옴
        TextView tvName = (TextView) view.findViewById(R.id.item_tv_Name);
        TextView tvPhone = (TextView) view.findViewById(R.id.item_tv_Phone);

        //현재 위치의 list배열에서 객체를 가져온다.
        ListViewAdapterData1 listdata1 = list1.get(i);

        //뷰에 적용
        tvName.setText(listdata1.getName());
        tvPhone.setText(listdata1.getPhonenum());

        return view;
    }

    //list에 아이템 추가
    public void addItemToList(String name, String phonenum) {
        ListViewAdapterData1 listdata1 = new ListViewAdapterData1();

        listdata1.setName(name);
        listdata1.setPhonenum(phonenum);

        list1.add(listdata1);

    }
}

ListViewAdapterData1.java

package com.example.mydiary;

public class ListViewAdapterData1 {

    private String name;
    private String phonenum;

    public String getName() { return name; }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhonenum() {
        return phonenum;
    }

    public void setPhonenum(String phonenum) {
        this.phonenum = phonenum;
    }
}

댓글남기기