ListView控件的基本使用以及适配器的使用

来源:互联网 发布:淘宝联盟数据采集 编辑:程序博客网 时间:2024/06/15 18:51

ListView控件:允许用户通过手指在屏幕上的上下滑动将屏幕外的数据滚动到屏幕内,屏幕上原有的数据滚出屏幕。

在activity_main中创建一个ListView控件:

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

ArrayAdapter适配器:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this  ,  android.R.layout.simple_list_item_1  ,  data);

根据传入数据的选择合适的类型 本例使用String泛型,

函数中传入的参数分别为 (当前的上下文、ListView子项布局的id、数组对象。)

ListView  listView = (ListView) findViewById(R.id.listview);         //实例化listview

 listView.setAdapter(adapter);                     //调用ListView的setAdapter()方法将配置器对象adapter传递进去

====================================================================================================================================

水果列表项目:

1.定义一个实体类Fruit 作为ListView的适配器适配类型

public class Fruit {
private String name;                                                   //定义了水果的名字
private int imageId;                                                    //定义了水果对应图片的资源Id。也即是说根据Id就可以找到对应的图片
public Fruit(String name, int imageId){                 
 this.name=name;
 this.imageId=imageId;
}
public String getName() {
 return name;
}
public int getImageId() {
 return imageId;
}

2.定义一个自定义布局,在layout文件夹下 新建一个fruit_item.xml配置文件

<ImageView
    android:id="@+id/fruitiamge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<TextView
    android:id="@+id/fruitname"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center"
    android:layout_marginLeft="10dip"
    />

该布局中定义了两个控件  :

 ImageView类型的fruitimage用于显示水果的图片

TextView类型的fruitname用于显示水果的名字

3.创建一个自定义适配器FruitAdapter:

public class FruitAdapter extends ArrayAdapter<Fruit>{           //该适配器继承自ArrayAdapter,将泛型指定为Fruit型,
private int resourceId;
 public  FruitAdapter(Context context, int textViewResourceId,List<Fruit> objects) {  //FruitAdapter适配器中传入了三个参数分别为 上下文、子项布局Id(这里就

                                                                                                                             是指每一条水果的Id、传入的数据
  super(context, textViewResourceId,objects);                                                       
  resourceId=textViewResourceId;
 }
 @Override
public View getView(int position,View convertView,ViewGroup parent){  //重写了getView()方法,这个方法每个子项被滚动到屏幕内的时候会被调用
  Fruit fruit =  (Fruit) getItem(position);                                                 //当这个子项被滚入屏幕的时候 首先通过getItem()方法实例化这个fruit数据
  View view  =LayoutInflater.from(getContext()).inflate(resourceId, null);   //使用LayoutInflater来为这个子项加载传入的布局
  ImageView fruitImage = (ImageView) view.findViewById(R.id.fruitiamge);//调用FindViewById来实例化ImageView控件
  TextView fruitname = (TextView) view.findViewById(R.id.fruitname);//调用FindViewById来实例化TextView控件
  fruitImage.setImageResource(fruit.getImageId());                            //调用setImageResourceId()方法来显示图片
  fruitname.setText(fruit.getName());                                                //调用setText()方法来显示文字

  return view;                                                                                       //返回布局
}
}

 4.修改MainActivity:

public class MainActivity extends Activity {
 private List<Fruit> FruitList = new ArrayList<Fruit>();                              //(1)创建一个列表类型的对象FruitList并将Fruit类中的name和图片Id传入FruitList;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 initFruits();                                                                                             //初始化水果数据                                         
 FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.fruit,FruitList);//(2)在onCreat()方法中创建FruitAdapter适配器,将FruitList传入到适配器
 ListView listView = (ListView) findViewById(R.id.listview);                         
 listView.setAdapter(adapter);                                                                     //(3)将adapter传递到listView中,这样就可以显示出滚入屏幕内的子项的图片和文本
                                                                                                                                                                                             
 listView.setOnItemClickListener(new OnItemClickListener(){                         

  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position,     //使用setOnItemClickListener()来注册一个ListView的监听器,每点击listView

                                                                                                             中的 任何一个子项都会调用onItemClick()方法,并且通过position参数判断点击的

                                                                                                              是哪一个子项
    long id) {
   Fruit fruit = FruitList.get(position);
   Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show(); //通过Toast方法将水果的名字显示出来.
  }
 });
 }
 private void initFruits() {
 .......  
 }

 

 

 

0 0
原创粉丝点击