AdapterView
10945 ワード
ContactActivity
package com.example.ex0414;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
public class ContactActivity extends AppCompatActivity {
ListView lvContact;
ContactAdapter adapter;
ArrayList<ContactVO> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
lvContact = findViewById(R.id.lvContact);
list = new ArrayList<ContactVO>();
for(int i =0; i<20; i++){
list.add(new ContactVO(R.drawable.ic_launcher_background,
"스인개"+(i+1),"010-1234-123"+i ));
}
adapter = new ContactAdapter(
ContactActivity.this,
R.layout.list_item,
list);
lvContact.setAdapter(adapter);
}
}
list = new ArrayList<ContactVO>();
ユーザが所望するデータ型とタイプを含むために、ArrayListで宣言して格納するデータのVOをフォーマットとする.宣言されたArrayListには、 list.add(new ContactVO(R.drawable.ic_launcher_background,
"스인개"+(i+1),"010-1234-123"+i ));
}
反復文を使用して追加されます.接続 adapter = new ContactAdapter(
ContactActivity.this,
R.layout.list_item,
list);
lvContact.setAdapter(adapter);
宣言のContactAdapter(表示するアクティビティ、カスタムレイアウト、データ)listviewのアダプタを接続します.
協力者の役割
ContactAdapter.class
package com.example.ex0414;
import android.app.LauncherActivity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class ContactAdapter extends BaseAdapter {
Context context;
//R.~~~ 는 정수형으로 변환시켜준다고 생각하면 된다.
int layout;
//여러형태의 데이터를 담기때문에
ArrayList<ContactVO> list;
//xml 파일 -> View 객체로 변환해주는 객체, 중요
LayoutInflater inflater;
public ContactAdapter(Context context, int layout, ArrayList<ContactVO> list) {
this.context = context;
this.layout = layout;
this.list = list;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@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
//직접적으로 구현해야되는 부분
// i는 인덱스 역할, view는 layout에 대한 정보를 보관해줄 객체, ViewGroup은 리스트 뷰 어뎁터
public View getView(int i, View view, ViewGroup viewGroup) {
//아이템 뷰에 배치된 View객체들을 한 번 초기화
ViewHolder holder = null;
// list_item.xml -> View 객체로 변환
if(view ==null){
view = inflater.inflate(layout, viewGroup, false);
holder = new ViewHolder(view);
//초기화된 holder 객체를 view객체에 태그로 저장,setTag는 저장시키는 것
view.setTag(holder);
}else{
//view객체에 저장된 holder객체를 가져와서 저장장
holder = (ViewHolder) view.getTag();
}
//list_item.xml 안에 있는 ImageView, Textview, Button 초기화
// ImageView imageView = view.findViewById(R.id.imageView2);
// ImageButton btnCall = view.findViewById(R.id.call);
// TextView tvName = view.findViewById(R.id.name);
// TextView tvPhone = view.findViewById(R.id.phone);
//생성한 View 객체를 활용
// ContactVO vo = (ContactVO) getItem(i);
// imageView.setImageResource(vo.getImg());
// tvName.setText(vo.getName());
// tvPhone.setText(vo.getPhone());
ContactVO vo = (ContactVO) getItem(i);
holder.getImageView().setImageResource(vo.getImg());
holder.getTvName().setText(vo.getName());
holder.getTvPhone().setText(vo.getPhone());
holder.getBtnCall().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//context = ContactActivity를 가리킴
Toast.makeText(context,vo.getPhone(),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context,MainActivity.class);
//ContactAdapter는 액티비티가 아닌 일반클래스이기 때문에
//액티비티에서만 사용할 수 있는 메소드를 바로 호출이 불가능
// 사용하려면 액티비티 정보를 가진 Context 객체를 통해서 사용가능!
context.startActivity(intent);
}
});
//생성된 Layout View객체를 리턴 -> listView에 출력
return view; //젤 중요
}
}
コード解釈
Context context;
int layout;
ArrayList<ContactVO> list;
LayoutInflater inflater;
public ContactAdapter(Context context, int layout, ArrayList<ContactVO> list) {
this.context = context;
this.layout = layout;
this.list = list;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
パラメータ受信データをConcactAdapterに初期化します.@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;
}
関連部分を返却します.(サイズ、インデックス内のデータ、インデックスID値) @Override
public View getView(int i, View view, ViewGroup viewGroup) {
//아이템 뷰에 배치된 View객체들을 한 번 초기화
ViewHolder holder = null;
// list_item.xml -> View 객체로 변환
if(view ==null){
view = inflater.inflate(layout, viewGroup, false);
holder = new ViewHolder(view);
//초기화된 holder 객체를 view객체에 태그로 저장,setTag는 저장시키는 것
view.setTag(holder);
}else{
//view객체에 저장된 holder객체를 가져와서 저장장
holder = (ViewHolder) view.getTag();
}
//list_item.xml 안에 있는 ImageView, Textview, Button 초기화
// ImageView imageView = view.findViewById(R.id.imageView2);
// ImageButton btnCall = view.findViewById(R.id.call);
// TextView tvName = view.findViewById(R.id.name);
// TextView tvPhone = view.findViewById(R.id.phone);
//생성한 View 객체를 활용
// ContactVO vo = (ContactVO) getItem(i);
// imageView.setImageResource(vo.getImg());
// tvName.setText(vo.getName());
// tvPhone.setText(vo.getPhone());
ContactVO vo = (ContactVO) getItem(i);
holder.getImageView().setImageResource(vo.getImg());
holder.getTvName().setText(vo.getName());
holder.getTvPhone().setText(vo.getPhone());
holder.getBtnCall().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//context = ContactActivity를 가리킴
Toast.makeText(context,vo.getPhone(),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context,MainActivity.class);
//ContactAdapter는 액티비티가 아닌 일반클래스이기 때문에
//액티비티에서만 사용할 수 있는 메소드를 바로 호출이 불가능
// 사용하려면 액티비티 정보를 가진 Context 객체를 통해서 사용가능!
context.startActivity(intent);
}
});
//생성된 Layout View객체를 리턴 -> listView에 출력
return view; //젤 중요
}
}
直接実施が必要な部分iはインデックスロール、ビューはレイアウト情報を含むオブジェクト、View GroupはリストビューアDepter
ConcactVO.class
```
package com.example.ex0414;
public class ContactVO {
private int img;
private String name;
private String phone;
public ContactVO(){}
public ContactVO(int img, String name, String phone) {
this.img = img;
this.name = name;
this.phone = phone;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "ContactVO{" +
"img=" + img +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
'}';
}
}ListViewに入れるデータを初期化またはロードします.
Viewholder
package com.example.ex0414;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
//아이탬뷰에 배치된
public class ViewHolder {
private ImageView imageView;
private TextView tvName;
private TextView tvPhone;
private ImageButton btnCall;
public ViewHolder(View itemView){
imageView = itemView.findViewById(R.id.imageView2);
btnCall = itemView.findViewById(R.id.call);
tvName = itemView.findViewById(R.id.name);
tvPhone = itemView.findViewById(R.id.phone);
}
public ImageView getImageView() {
return imageView;
}
public TextView getTvName() {
return tvName;
}
public TextView getTvPhone() {
return tvPhone;
}
public ImageButton getBtnCall() {
return btnCall;
}
}
CustomListViewの各プロパティ値を初期化して返します.Reference
この問題について(AdapterView), 我々は、より多くの情報をここで見つけました https://velog.io/@dfdf/AdapterViewテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol