AndroidのListViewコントロール

6904 ワード

図のような効果を実現する:1.フルーツの名前と、フルーツの写真
2.ListViewをクリックしてクリックイベントに応答する
まずレイアウトファイルを書きます.
1 activity_main.xmlはListViewにidを設定する
<LinearLayout 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"
       tools:context=".MainActivity" >

    <ListView
        android:id="@+id/list_View"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />

</LinearLayout>

2 fruit_item.xml     android:layout_gravity="centerでテキストを中央に表示
<pre name="code" class="html"><?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="match_parent"
    android:orientation="horizontal"
  >
    
    <ImageView
      	  	android:id="@+id/fruit_image"
        	 android:layout_width="wrap_content"
   		 	android:layout_height="wrap_content"
        
        />

   <TextView
      	  android:id="@+id/fruit_name"
        	 android:layout_width="wrap_content"
   			 android:layout_height="wrap_content"
      	 	 android:layout_gravity="center"  
      	 	 android:layout_marginLeft="10dp"
        />
    <!-- android:layout_gravity="center"          -->
</LinearLayout>
<span style="font-family: Arial, Helvetica, sans-serif;">     ,      java   </span>
    Fruit.java 
  
  
 
package com.example.listviewtest;


public class Fruit 
{
	private String name;  //    
	
	private int imageId;  //         id
	
	public Fruit(String name, int imageId) //        
	{
		this.name = name;
		this.imageId = imageId;
	}


	public String getName() 
	{
		return name;
	}


	public void setName(String name) 
	{
		this.name = name;
	}


	
	
	public int getImageId() 
	{
		return imageId;
	}


	public void setImageId(int imageId) 
	{
		this.imageId = imageId;
	}
}
MainActivity.java   
MainActivityで最初に表示するリソースファイルはここでprivate ListfruitList=new ArrayList()を定義します.次にアダプタをカスタマイズします.このアダプタはArrayAdapterから継承され、汎用型をFruitクラスに作成します.
新規FruitAdapter
package com.example.listviewtest;

import java.util.List;

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 FruitAdapter extends ArrayAdapter<Fruit>   //      Fruit 
{
	private int resourceId;
	private ImageView fruitImage;
	private TextView	fruitName ;
	private View		 view;
	/*  ArrayAdapter<>   
	 * ArrayAdapter            ,      ,ListView     id        
	 * */
		
	//1  
	public FruitAdapter(
				Context context,  //   
				int textViewResourceId, //ListView     id
				List<Fruit> objects)   //  
		{
			super(context, textViewResourceId, objects);
			resourceId = textViewResourceId ; 
		}
	//2    getView()  
	//                      
		@Override
		public View getView(int position, View convertView, ViewGroup parent) 
		{
			Fruit	fruit = getItem(position);//    getItem()      Fruit  
			ViewHolder viewHolder;
				if(convertView == null)//    ,        ,            
				{ 					//    LayoutInflater               
					view =	LayoutInflater.from(getContext()).inflate(resourceId, null);
					viewHolder = new ViewHolder();
					//     View FindViewById()       ImageView TextView   
					viewHolder.fruitImage =(ImageView) view.findViewById(R.id.fruit_image);
					viewHolder.fruitName  =(TextView) view.findViewById(R.id.fruit_name);
					view.setTag(viewHolder);   // viewHolder   view 
				}
				else 
				{
					view =convertView;
				viewHolder = (ViewHolder) view.getTag(); //    viewHolder
				}
		/*	
			fruitImage  =(ImageView) view.findViewById(R.id.fruit_image);
			fruitName  =(TextView) view.findViewById(R.id.fruit_name);*/
	//     setImageResource(fruit.getImageId()),setText(fruit.getName());         
				viewHolder.fruitImage.setImageResource(fruit.getImageId());
				viewHolder.fruitName.setText(fruit.getName());
				return  view ;
		}
		class ViewHolder //        ,   ViewHolder ,   ,        ,
		{
			ImageView fruitImage;
			TextView fruitName;
		}
}
MainActivity.java   
package com.example.listviewtest;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MainActivity extends Activity 
{
	
	private List<Fruit> fruitList = new ArrayList<Fruit>();
	
	

	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initFruit(); 	//        
		FruitAdapter  adapter = new FruitAdapter(getApplicationContext(),R.layout.fruit_item,fruitList);
		ListView listview = (ListView) findViewById(R.id.list_View);
		listview.setAdapter(adapter);
		
		listview.setOnItemClickListener(new OnItemClickListener() 
		{

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,long id)
			{
			
				Fruit fruit = fruitList.get(position);
				Toast.makeText(MainActivity.this, "       "+fruit.getName(), 0).show();
			}
		});
	
	}



	private void initFruit()
	{
		Fruit aa = new Fruit("aa", R.drawable.aa);
		fruitList.add(aa);
		
		Fruit bb = new Fruit("bb", R.drawable.bb);
		fruitList.add(bb);
		
		Fruit cc = new Fruit("cc", R.drawable.cc);
		fruitList.add(cc);
		
		Fruit ee = new Fruit("ee", R.drawable.ee);
		fruitList.add(ee);
		
		Fruit ff = new Fruit("ff", R.drawable.ff);
		fruitList.add(ff);
		
		Fruit gg = new Fruit("gg", R.drawable.gg);
		fruitList.add(gg);
		
		Fruit hh = new Fruit("hh", R.drawable.hh);
		fruitList.add(hh);
		
		Fruit ii = new Fruit("ii", R.drawable.ii);
		fruitList.add(ii);
		
		Fruit jj = new Fruit("jj", R.drawable.jj);
		fruitList.add(jj);
		
		Fruit ll = new Fruit("ll", R.drawable.ll);
		fruitList.add(ll);
		
		Fruit mm = new Fruit("mm", R.drawable.mm);
		fruitList.add(mm);
	}

	
}