(광의) 관계가 없는 인터페이스들이 같이 일할 수 있도록 도와주는 디자인 패턴
(협의) 데이터를 어댑터뷰에 공급해주는 클래스
- ListView, ExpandableListView, GridView, Spinner, Gallery 등의 (선택) 어댑터뷰에 사용
- 어댑터뷰를 사용할 때 어댑터뷰의 모양을 설정하고 데이터를 채워주는 타입별 어댑터 클래스를 함께 사용 (ex. ArrayAdapter, SimpleCursorAdapter 등)
- cursor : 레코드 셋을 순화하는데 쓰는 클래스 (주소를 관리)_DB
- 대화창 목록, 캘린더, 음악 목록(격자), 앨범목록(자유로운 격자), 전화앱, 카톡, 인스타그램, 스타벅스, 카톡 안의 채팅방 등
FAB(Floating Action Button) : plus 버튼 어디서나 접근 가능한 버튼
데이터를 목록 형태로 보여주고 하나를 선택하는 용도로 사용
new ArrayAdapter<String>(Context context, int resource, T[] objects);
//resource = Format = android.R.layout_simple_list_item_1
//T[] objects = Data
list.setAdapter(adapter);
//list = Format
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {}
});
//view : 항목별 뷰, position : 순서, long id : DB의 필드명
리스트 뷰의 항목을 동적으로 추가•삭제 하려면
ArrayList<T>
를 정의한 후add()
와remove()
메소드를 사용
변경사항을 업데이트하기 위해Adapter.notifyDataSetChanged()
사용
안드로이드가 미리 만들어 제공하는 레이아웃의 id로서 뷰에 따라 다음 레이아웃들을 적용
package ojy.mjc.ex11_04;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
int index; //전역변수 설정 해서 변수 같이 씀.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText editText = findViewById(R.id.edtItem);
Button btnAdd = findViewById(R.id.btnAdd);
ListView listView = findViewById(R.id.listView1);
final ArrayList<String> midList = new ArrayList<>();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, midList);
listView.setAdapter(adapter);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
midList.add(editText.getText().toString());
adapter.notifyDataSetChanged();
}
});
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
dlg.setTitle("삭제여부 확인하실게요");
dlg.setMessage("삭제하시겠습니까?");
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
index = position;
return false;
}
});
//LongClick 리스너의 후속 리스너 -> ClisckListener 로 자동 호출되기 때문에 전역변수 index로 값을 넘겨줌.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "확인을 눌렀음", Toast.LENGTH_SHORT).show();
midList.remove(index);
adapter.notifyDataSetChanged();
}
});
dlg.show();
}
});
}
}
사진이나 그림을 격자 모양으로 배치
xml 파일에는 간단히<GridView>
를 넣으면 되지만, Java 코드에는 필요한 내용을 반드시 코딩하여 항목을 동적 생성해야 한다.
<GridView>
의 속성 중 열 개수를 지정하는 numColumns는 필수 지정!
개발자가 어댑터뷰의 항목들을 직접 설계하여 구현할 때에는 (커스터마이징) BaseAdapter 클래스를 상속받아 직접 어댑터 클래스를 작성해 개발한다.
화면에 출력되는 뷰를 구현하는 필수 메소드들을 오버라이딩한다.
poster_ID는 static형 변수로 만들어 주고, MainActivity.this는 context로 바꿔주면서 오류를 해결했다.