Android ListView 구현 그림 목록 표시
대상 효과:
ListView 내용 이 너무 많 으 면 화면 을 미 끄 러 뜨 려 표시 할 수 있 으 며,한 줄 을 클릭 하면 토스트 방법 으로 과일 이름 을 팝 업 할 수 있 습 니 다.
1.새 항목,새 entity 실체 패키지,가방 에 과일 정 보 를 저장 하 는 Fruit 클래스 를 만 듭 니 다.
Fruit.java 페이지:
package com.example.entity;
public class Fruit {
private int imageId; // id
private String imageName; //
public Fruit(int imageId, String imageName) {
super();
this.imageId = imageId;
this.imageName = imageName;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getImageName() {
return imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
}
2.activity 에서main.xml 페이지 에 ListView 컨트롤 을 추가 하여 모든 과일 즉 과일 이름 을 표시 합 니 다.activity_main.xml 페이지:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lvFruits"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
3.하나의 ListView 에 여러 줄 의 정보 가 있 습 니 다.각 줄 의 정 보 는 하나의 LinearLayout 서브 레이아웃 으로 볼 수 있 습 니 다.서브 레이아웃 에는 두 개의 컨트롤 이미지 View 와 TextView 가 있 고 수평 으로 배열 되 어 있 습 니 다.listview_item.xml 페이지:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ivImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tvName"
android:layout_marginLeft="10dp"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
4.새 adaptor 패키지,패키지 에 FruitAdaopter.java 클래스 를 만 들 고 어댑터,연결 레이아웃 과 데 이 터 를 추가 합 니 다.FruitAdaopter.java 페이지:
package com.example.adapter;
import java.util.List;
import com.example.entity.Fruit;
import com.example.listview.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class FruitAdaoper extends ArrayAdapter<Fruit> { // ,
private int resourceId;
public FruitAdaoper(Context context, int textViewResourceId,
List<Fruit> objects) { // , ,
super(context, textViewResourceId, objects);
resourceId = textViewResourceId; //
}
@Override //getView ,
public View getView(int position, View convertView, ViewGroup parent) {// , , view
View view;
ViewHolder viewHolder; // ViewHolder, , ,
if(convertView==null){
viewHolder=new ViewHolder();
view = LayoutInflater.from(getContext()).inflate(//convertView , getView ,
resourceId, null); // , , id
viewHolder.ivImage = (ImageView) view.findViewById(R.id.ivImage);// , , ViewHolder
viewHolder.tvName = (TextView) view.findViewById(R.id.tvName); //
view.setTag(viewHolder);
}else{
view=convertView; //convertView , convertView
viewHolder=(ViewHolder) view.getTag();
}
Fruit fruit = getItem(position);//
viewHolder.ivImage.setImageResource(fruit.getImageId());// id
viewHolder.tvName.setText(fruit.getImageName()); //
return view;
}
}
class ViewHolder{ // , 。
ImageView ivImage;
TextView tvName;
}
5.MainActivity.java 페이지 에서 데이터 정 보 를 초기 화하 고 각 줄 을 클릭 하 는 클릭 이 벤트 를 추가 합 니 다.MainActivity.java 페이지:
package com.example.listview;
import java.util.ArrayList;
import java.util.List;
import com.example.adapter.FruitAdaoper;
import com.example.entity.Fruit;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView lvFruits;
private List<Fruit> fruitList = new ArrayList<Fruit>(); //
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvFruits = (ListView) findViewById(R.id.lvFruits); //
getData();
FruitAdaoper fruitAdapter = new FruitAdaoper(this,
R.layout.listview_item, fruitList); //
lvFruits.setAdapter(fruitAdapter); //
lvFruits.setOnItemClickListener(new OnItemClickListener() { //
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
Fruit fruit=fruitList.get(position); //
Toast.makeText(MainActivity.this,fruit.getImageName(),Toast.LENGTH_LONG).show();//
}
});
}
private void getData() {
int[] imageIds = { R.drawable.apple_pic, R.drawable.banana_pic,
R.drawable.cherry_pic, R.drawable.grape_pic,
R.drawable.mango_pic, R.drawable.orange_pic,
R.drawable.pear_pic, R.drawable.pineapple_pic,
R.drawable.strawberry_pic, R.drawable.watermelon_pic };
String[] names = { " ", " ", " ", " ", " ", " ", " ", " ", " ",
" " };
for(int i=0;i<imageIds.length;i++){ //
fruitList.add(new Fruit(imageIds[i],names[i])); // id name
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
6.실행 하면 목표 효과 가 나타 납 니 다.7.FruitAdaopter.java 클래스 의 getView 방법 은 모든 하위 항목 이 화면 으로 굴 러 갈 때 호출 되 고 매번 레이아웃 을 다시 불 러 오기 때문에 효율 성 을 높이 기 위해 판단 할 수 있 습 니 다.프로그램 이 한 번 실 행 된 적 이 있 으 면 레이아웃 을 매개 변수 convertView 에 저장 합 니 다.
8.마찬가지 로 getView 에서 가 져 온 컨트롤 id 가 실 행 될 때마다 실행 되면 효율 이 떨 어 지기 때문에 ViewHolder 류 가 가 져 온 컨트롤 정 보 를 정의 해 야 합 니 다.처음 실 행 될 때 findViewById()를 실행 한 후 모든 컨트롤 정 보 를 인 스 턴 스 의 ViewHolder 에 저장 하고 뒤쪽 에서 호출 할 때마다 사용 하면 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.