Android ListView 구현 그림 목록 표시

본 논문 의 사례 는 안 드 로 이 드 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 에 저장 하고 뒤쪽 에서 호출 할 때마다 사용 하면 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기