Computer >> 컴퓨터 >  >> 프로그램 작성 >> Android

Android에서 데이터베이스와 함께 recyclerview를 사용하는 방법은 무엇입니까?

<시간/>

이 예제는 Android에서 데이터베이스와 함께 recyclerview를 사용하는 방법을 보여줍니다.

1단계 − Android Studio에서 새 프로젝트를 생성하고 파일 ⇒ 새 프로젝트로 이동하여 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.

build.gradle(모듈:앱)에 다음 종속성을 추가합니다.

구현 'com.android.support:recyclerview-v7:28.0.0'구현 'com.android.support:cardview-v7:28.0.0'구현 'com.android.support:design:28.0.0' 

2단계 − res/layout/activity_main.xml에 다음 코드를 추가합니다.

  <버튼 안드로이드:id="@+id/ btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_marginEnd="16dp" android:text="ADD" android:padding="2dp" android:layout_marginBottom="4dp"/>

3단계 − 아래에 언급된 대로 레이아웃 리소스 파일을 생성하고 해당 코드를 추가합니다. −

add_contacts.xml -

  

contact_list_layout.xml -

        

4단계 − Java 클래스를 생성하고 ContactAdapter.java에 다음 코드를 추가합니다.

 android.app.Activity 가져오기; android.content.Context 가져오기; android.content.DialogInterface 가져오기; android.text.TextUtils 가져오기; android.view.LayoutInflater 가져오기; android.view.view 가져오기; android.view 가져오기. ViewGroup;가져오기 android.widget.EditText;가져오기 android.widget.Filter;가져오기 android.widget.Filterable;가져오기 android.widget.Toast;가져오기 java.util.ArrayList;가져오기 java.util.Objects;가져오기 androidx.appcompat.app .AlertDialog;import androidx.recyclerview.widget.RecyclerView;class ContactAdapter extends RecyclerView.Adapterimplements Filterable { private Context context; 개인 ArrayList<연락처> listContacts; 개인 ArrayList<연락처> mArrayList; 개인 SqliteDatabase mDatabase; ContactAdapter(컨텍스트 컨텍스트, ArrayList listContacts) { this.context =컨텍스트; this.listContacts =listContacts; this.mArrayList =listContacts; mDatabase =새로운 SqliteDatabase(컨텍스트); } @Override public ContactViewHolder onCreateViewHolder(ViewGroup 부모, int viewType) { 보기 보기 =LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_list_layout, 부모, false); 새로운 ContactViewHolder 반환(보기); } @Override public void onBindViewHolder(ContactViewHolder holder, int position) { 최종 연락처 연락처 =listContacts.get(position); holder.tvName.setText(연락처.getName()); holder.tvPhoneNum.setText(contacts.getPhno()); holder.editContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(보기 보기) { editTaskDialog(연락처); } }); holder.deleteContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(보기 보기) { mDatabase.deleteContact(contacts.getId()); ((활동) 컨텍스트).finish(); context.startActivity(( (활동) 컨텍스트).getIntent()), } }); } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { String charString =charSequence.toString(); if (charString.isEmpty()) { listContacts =mArrayList; } else { ArrayList<연락처>filteredList =새로운 ArrayList<>(); for (연락처 연락처 :mArrayList) { if (contacts.getName().toLowerCase().contains(charString)) {filteredList.add(연락처); } } listContacts =필터링된 목록; } FilterResults filterResults =새로운 FilterResults(); filterResults.values ​​=listContacts; 반환 필터 결과; } @Override 보호 무효 publishResults(CharSequence charSequence, FilterResults filterResults) { listContacts =(ArrayList) filterResults.values; 알림데이터세트변경(); } }; } @Override public int getItemCount() { return listContacts.size(); } 개인 무효 editTaskDialog(최종 연락처 연락처) { LayoutInflater 팽창기 =LayoutInflater.from(context); 보기 subView =inflater.inflate(R.layout.add_contacts, null); 최종 EditText nameField =subView.findViewById(R.id.enterName); 최종 EditText contactField =subView.findViewById(R.id.enterPhoneNum); if (연락처 !=null) { nameField.setText(contacts.getName()); contactField.setText(String.valueOf(contacts.getPhno())); } AlertDialog.Builder 빌더 =새로운 AlertDialog.Builder(컨텍스트); builder.setTitle("연락처 수정"); builder.setView(서브뷰); builder.create(); builder.setPositiveButton("EDIT CONTACT", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { final String name =nameField.getText().toString(); final String ph_no =contactField.getText ().toString(); if (TextUtils.isEmpty(name)) { Toast.makeText(context, "문제가 발생했습니다. 입력 값을 확인하세요", Toast.LENGTH_LONG).show(); } else { mDatabase.updateContacts( 새로운 연락처(Objects.requireNonNull(연락처).getId(), 이름, ph_no)); ((활동) 컨텍스트).finish(); context.startActivity(((활동) 컨텍스트).getIntent()); } } } ); builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface 대화 상자, int which) { Toast.makeText(context, "작업 취소됨",Toast.LENGTH_LONG).show(); } } ); builder.show(); }}

5단계 − Java 클래스를 생성하고 Contacts.java에 다음 코드를 추가합니다.

공개 클래스 연락처 { private int id; 개인 문자열 이름; 개인 문자열 전화번호; 연락처(문자열 이름, 문자열 phno) { this.name =이름; this.phone번호 =전화번호; } 연락처(int id, 문자열 이름, 문자열 phno) { this.id =id; this.name =이름; this.phone번호 =전화번호; } int getId() { 반환 ID; } 공개 무효 setId(int id) { this.id =id; } 공개 문자열 getName() { 반환 이름; } 공개 무효 setName(문자열 이름) { this.name =이름; } 문자열 getPhno() { 전화번호 반환; } 공개 무효 setPhno(문자열 phno) { this.phoneNumber =phno; }}

6단계 − Java 클래스를 생성하고 ContactViewHolder.java에 다음 코드를 추가합니다.

 android.view.View 가져오기; android.widget.ImageView 가져오기; android.widget.TextView 가져오기; androidx.recyclerview.widget.RecyclerView 가져오기; 클래스 ContactViewHolder extends RecyclerView.ViewHolder { TextView tvName, tvPhoneNum; 이미지보기 삭제 연락처; 이미지뷰 편집컨택트; ContactViewHolder(보기 itemView) { super(itemView); tv이름 =itemView.findViewById(R.id.contactName); tvPhoneNum =itemView.findViewById(R.id.phoneNum); deleteContact =itemView.findViewById(R.id.deleteContact); editContact =itemView.findViewById(R.id.editContact); }}

7단계 − Java 클래스를 생성하고 SqliteDatabase.java에 다음 코드를 추가합니다.

 android.content.ContentValues ​​가져오기; android.content.Context 가져오기; android.database.Cursor 가져오기; android.database.sqlite.SQLiteDatabase 가져오기; android.database.sqlite.SQLiteOpenHelper 가져오기; java.util.ArrayList 가져오기; public 클래스 SqliteDatabase 확장 SQLiteOpenHelper { private static final int DATABASE_VERSION =5; 개인 정적 최종 문자열 DATABASE_NAME ="연락처"; 개인 정적 최종 문자열 TABLE_CONTACTS ="연락처"; 개인 정적 최종 문자열 COLUMN_ID ="_id"; 개인 정적 최종 문자열 COLUMN_NAME ="contactName"; 개인 정적 최종 문자열 COLUMN_NO ="phoneNumber"; SqliteDatabase(컨텍스트 컨텍스트) { 슈퍼(컨텍스트, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_CONTACTS_TABLE ="CREATE TABLE " + TABLE_CONTACTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT," + COLUMN_NO + " INTEGER" + ")"; db.execSQL(CREATE_CONTACTS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 생성(DB); } ArrayList listContacts() { String sql ="선택 * from " + TABLE_CONTACTS; SQLiteDatabase db =this.getReadableDatabase(); ArrayList<연락처> storeContacts =새로운 ArrayList<>(); 커서 커서 =db.rawQuery(sql, null); if (cursor.moveToFirst()) { do { int id =Integer.parseInt(cursor.getString(0)); 문자열 이름 =cursor.getString(1); 문자열 phno =cursor.getString(2); storeContacts.add(새로운 연락처(ID, 이름, 전화번호)); } 동안 (cursor.moveToNext()); } 커서.닫기(); 반환 storeContacts; } 무효 addContacts(연락처 연락처) { ContentValues ​​값 =new ContentValues(); values.put(COLUMN_NAME, 연락처.getName()); values.put(COLUMN_NO, 연락처.getPhno()); SQLiteDatabase db =this.getWritableDatabase(); db.insert(TABLE_CONTACTS, null, 값); } 무효 updateContacts(연락처 연락처) { ContentValues ​​값 =new ContentValues(); values.put(COLUMN_NAME, 연락처.getName()); values.put(COLUMN_NO, 연락처.getPhno()); SQLiteDatabase db =this.getWritableDatabase(); db.update(TABLE_CONTACTS, 값, COLUMN_ID + " =?", new String[]{String.valueOf(contacts.getId())}); } 무효 deleteContact(int id) { SQLiteDatabase DB =this.getWritableDatabase(); db.delete(TABLE_CONTACTS, COLUMN_ID + " =?", new String[]{String.valueOf(id)}); }}

8단계 − src/MainActivity.java

에 다음 코드 추가
 androidx.appcompat.app.AlertDialog 가져오기; androidx.appcompat.app.AppCompatActivity 가져오기; androidx.recyclerview.widget.LinearLayoutManager 가져오기; androidx.recyclerview.widget.RecyclerView 가져오기; android.content.DialogInterface 가져오기 .Bundle;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.util. ArrayList; 공개 클래스 MainActivity는 AppCompatActivity를 확장합니다. { private SqliteDatabase mDatabase; @Override protected void onCreate(Bundle storedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView contactView =findViewById(R.id.myContactList); LinearLayoutManager linearLayoutManager =새로운 LinearLayoutManager(this); contactView.setLayoutManager(linearLayoutManager); contactView.setHasFixedSize(true); mDatabase =새로운 SqliteDatabase(this); ArrayList<연락처> allContacts =mDatabase.listContacts(); if (allContacts.size()> 0) { contactView.setVisibility(View.VISIBLE); ContactAdapter mAdapter =새로운 ContactAdapter(this, allContacts); contactView.setAdapter(mAdapter); } else { contactView.setVisibility(View.GONE); Toast.makeText(this, "데이터베이스에 연락처가 없습니다. 지금 추가하세요.", Toast.LENGTH_LONG).show(); } 버튼 btnAdd =findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(보기 보기) { addTaskDialog(); } }); } 개인 무효 addTaskDialog() { LayoutInflater 팽창기 =LayoutInflater.from(this); 보기 subView =inflater.inflate(R.layout.add_contacts, null); 최종 EditText nameField =subView.findViewById(R.id.enterName); 최종 EditText noField =subView.findViewById(R.id.enterPhoneNum); AlertDialog.Builder 빌더 =new AlertDialog.Builder(this); builder.setTitle("새 연락처 추가"); builder.setView(서브뷰); builder.create(); builder.setPositiveButton("컨택 추가", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface 대화 상자, int which) { 최종 문자열 이름 =nameField.getText().toString(); 최종 문자열 ph_no =noField.getText ().toString(); if (TextUtils.isEmpty(name)) { Toast.makeText(MainActivity.this, "문제가 발생했습니다. 입력 값을 확인하세요", Toast.LENGTH_LONG).show(); } else { 연락처 newContact =새로운 연락처(이름, ph_no), mDatabase.addContacts(newContact), finish(), startActivity(getIntent()), } } }), builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "작업 취소됨", Toast.LENGTH_LONG).show(); } }); builder.show(); } @Override protected void onDestroy() { super.onDestroy(); if (mDatabase !=null) { mDatabase.close(); } }}

9단계 − androidManifest.xml에 다음 코드 추가

     <카테고리 android:name=" android.intent.category.LAUNCHER" />   

응용 프로그램을 실행해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고 도구 모음에서 실행 아이콘을 클릭합니다. 모바일 장치를 옵션으로 선택한 다음 기본 화면을 표시할 모바일 장치를 확인하십시오 -

Android에서 데이터베이스와 함께 recyclerview를 사용하는 방법은 무엇입니까?

Android에서 데이터베이스와 함께 recyclerview를 사용하는 방법은 무엇입니까?