ListView的簡單應用並對其進行簡單優化
阿新 • • 發佈:2018-12-21
主佈局檔案(只有一個ListView)
<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/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
自定義佈局檔案
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/image_view" android:contentDescription="@string/desc" android:layout_width="120dp" android:layout_height="120dp" android:src="@drawable/duck" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_view" /> <TextView android:id="@+id/describe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_view" android:layout_below="@id/title" android:ellipsize="end" android:maxLines="2" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/describe" android:layout_toRightOf="@id/image_view" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/image_view" android:layout_alignParentRight="true" android:background="@null" android:focusable="false" android:text="@string/shopping_cart" /> </RelativeLayout>
MainActivity.java
package com.example.list_view4_9; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; private List<Food> list = new ArrayList<Food>(); private Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.list_view); initFood(); MyAdapter ma = new MyAdapter(); listView.setAdapter(ma); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) { Food f = list.get(arg2); Toast.makeText(MainActivity.this, f.getTitle(), Toast.LENGTH_LONG).show(); } }); } //初始化資料 private void initFood(){ for(int i=0;i<10;i++) { Food f = new Food(); f.setTitle("麻辣鴨脖"+i); f.setDesc("精品鴨脖選擇六和品牌的一級櫻桃谷鴨,無淤血,無表皮破損,有我們的專業的採購員精選:重量40-50g,每千克為6根,長度24cm每根,比普通鴨脖含肉量更多。"); f.setPrice("¥10.0"); list.add(f); } } class MyAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int arg0, View convertView, ViewGroup arg2) { // TODO Auto-generated method stub View view; Food f = list.get(arg0); //建立一個ViewHolder物件 final ViewHolder viewHolder; //convertView引數用於將之前載入好的佈局進行快取,以便重用。 //如果convertView不為null直接進行重用。提高了執行效率 if(convertView==null) { view =View.inflate(MainActivity.this, R.layout.layout_food, null); //將控制元件例項存放在viewHolder裡面 viewHolder = new ViewHolder(); viewHolder.tv_desc= (TextView)view.findViewById(R.id.describe); viewHolder.tv_price= (TextView)view.findViewById(R.id.price); viewHolder.tv_title= (TextView)view.findViewById(R.id.title); //將ViewHolder物件儲存在view中 view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } viewHolder.tv_title.setText(f.getTitle()); viewHolder.tv_desc.setText(f.getDesc()); viewHolder.tv_price.setText(f.getPrice()); bt = (Button) view.findViewById(R.id.button); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,viewHolder.tv_title.getText()+""+viewHolder.tv_price.getText()+viewHolder.tv_desc.getText(), Toast.LENGTH_LONG).show(); } }); return view; } } //用於對控制元件例項進行快取 class ViewHolder { TextView tv_title,tv_price,tv_desc; } }
執行效果圖