on
listView 커스터마이징
listView 커스터마이징
res / layout 하위폴더
activity_main.xml
list.xml
위치 : java/com/example.a3_listadapterexam
model / MainActivity.class
package com.example.a3_listadapterexam; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.example.a3_listadapterexam.adapter.JobAdapter; import com.example.a3_listadapterexam.model.Job; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { List list; JobAdapter adapter; ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = new ArrayList<>(); adapter = new JobAdapter(this, R.layout.list_item, list); listView = findViewById(R.id.listView); // 어댑터 설정 listView.setAdapter(adapter); // 이 줄 이후부터, 어댑터와 listView는 서로 소통을 함함 // 이벤트 설정 listView.setOnItemClickListener(this); // 어댑터 객체를 통해서 리스트에 데이터 저장 addData(); } @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Job item = adapter.getItem(position); String result = item.getTitle() + "
" + item.getDescription(); Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); } /** 데이터 추가 */ // 어댑터 객체를 통해서 리스트에 데이터 저장 public void addData() { adapter.add(new Job( /// 데이터 값)); } }
adapter / JobAdapter.class
package com.example.a3_listadapterexam.adapter; import android.app.Activity; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.example.a3_listadapterexam.R; import com.example.a3_listadapterexam.model.Job; import java.util.List; // 리스트 객체에 데이터를 저장하거나 읽어올 때는 반드시 어댑터 객체를 사용해야함 public class JobAdapter extends ArrayAdapter { Activity activity; // MainActivity 객체 저장 int resource; // list_item.xml 파일의 id 저장 /** * MainActivity에서 사용하는 생성자 * @param context : activity가 전달됨 * @param resource : list_item.xml 파일의 id가 전달됨 * @param objects : list객체가 전달됨 */ public JobAdapter(@NonNull Context context, int resource, @NonNull List objects) { super(context, resource, objects); // 이 줄 이후로 어댑터 객체가 리스트 객체를 관리함 activity = (Activity) context; this.resource = resource; } /** 1줄화면 + 1줄데이터 결합하는 기능의 함수 * => ListView가 List에 저장된 데이터 갯수만큼 호출하는 함수 * @param position : list 객체의 데이터 위치값 * @param convertView : 1줄화면을 관리하는 객체 * @param parent : ListView 객체(사용안함) * @return */ @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { // 1줄화면 객체가 null이면 if(convertView == null) { // 1. 1줄 화면 만들기 convertView = activity.getLayoutInflater().inflate(resource, null); } // 2. list에서 데이터 1개 꺼내기 Job item = getItem(position); // 3. 1줄화면 + 1줄 데이터 if(item != null) { ImageView imageView = convertView.findViewById(R.id.imageView); TextView textView1 = convertView.findViewById(R.id.textView1); TextView textView2 = convertView.findViewById(R.id.textView2); // 화면 설정 imageView.setImageResource(item.getImage()); textView1.setText(item.getTitle()); textView2.setText(item.getDescription()); } // 4. 1줄화면 리턴 return convertView; } }
from http://hhnee.tistory.com/115 by ccl(A) rewrite - 2021-12-13 22:01:51