当前位置: 代码迷 >> Android >> android基础入门ListView视图(八)
  详细解决方案

android基础入门ListView视图(八)

热度:30   发布时间:2016-04-28 06:31:32.0
android基础入门ListView视图(8)

一.ListView视图:

     ListView 用来显示一个列表控件。

  

public class MainActivity extends ListActivity {  	String[] str = {"中国","法国","英国","瑞士","奥地利","美国","印度","梵蒂冈"};		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);				setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str));			}	@Override	protected void onListItemClick(ListView l, View v, int position, long id) {		// TODO Auto-generated method stub		Toast.makeText(this,"你点击了"+str[position],Toast.LENGTH_SHORT).show();	}}

这是实现的最基础的ListView列表:

MainActivity扩展了ListView类,而ListView类扩展了Activity类并且通过绑定到一个数据源来显示一个项列表。还要注意不用再布局文件中添加ListView控件,因为在ListView类中已经包含着一个ListView,在onCreate()方法中,使用setListAdapter()方法来用一个ListView以编程方式填充活动的整个屏幕。ArrayAdapter对象管理将由ListView显示的字符串数组。当点击了ListView中的一个列表选项时,将触发onListItemClick()方法,显示一条吐司信息。


运行图:


我们可以将要显示的字符串存储在strings.xml:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">ListViewTest</string>    <string name="action_settings">Settings</string>    <string name="hello_world">Hello world!</string>    <string-array name="str">        <item>中国</item>        <item>法国</item>        <item>英国</item>        <item>瑞士</item>        <item>奥地利</item>        <item>美国</item>        <item>印度</item>        <item>梵蒂冈</item>        <item>马尔代夫</item>    </string-array></resources>


MainActivity.java:

public class MainActivity extends ListActivity {  	String[] str ;		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);				str = getResources().getStringArray(R.array.str);				setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str));			}	@Override	protected void onListItemClick(ListView l, View v, int position, long id) {		// TODO Auto-generated method stub		Toast.makeText(this,"你点击了"+str[position],Toast.LENGTH_SHORT).show();	}}


通过getResources()方法以编程方式来检索与应用程序捆绑的资源。


自定义ListView+自定义适配器(BaseAdapter):

ListView布局:

<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content">    <TextView        android:id="@+id/textLeft"      android:layout_alignParentLeft="true"     android:layout_width="wrap_content"      android:layout_height="wrap_content"/>    <TextView       android:id="@+id/textRight"      android:layout_alignParentRight="true"      android:layout_width="wrap_content"      android:layout_height="wrap_content"/>  </RelativeLayout>  

MainActivity.java:

public class MainActivity extends ListActivity {  	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);				  		      //设置一个Adapter,使用自定义的Adapter  		 setListAdapter(new TextImageAdapter(this)); 	}	    private class TextImageAdapter extends BaseAdapter{  		         private Context mContext;  		       public TextImageAdapter(Context context) {  		            this.mContext=context;  		        }  		         /** 		          * 元素的个数 		          */  		         public int getCount() {  		             return left.length;  		         }  		   		         public Object getItem(int position) {  		             return null;  		         }  		   		       public long getItemId(int position) {  		            return 0;  		        }  		         //用以生成在ListView中展示的一个个元素View  		         public View getView(int position, View convertView, ViewGroup parent) {  		             //优化ListView  		           if(convertView==null){  		                 convertView=LayoutInflater.from(mContext).inflate(R.layout.activity_main, null);  		                 ItemViewCache viewCache=new ItemViewCache();  		                viewCache.mTextLeft=(TextView)convertView.findViewById(R.id.textLeft);  		                 viewCache.mTextRight=(TextView)convertView.findViewById(R.id.textRight);  		                convertView.setTag(viewCache);  		            }  		             ItemViewCache cache=(ItemViewCache)convertView.getTag();  		             //设置文本和图片,然后返回这个View,用于ListView的Item的展示  		             cache.mTextLeft.setText(left[position]);  		             cache.mTextRight.setText(Right[position]);  		           return convertView;  		       }  		     }  		      		    private static class ItemViewCache{  		         public TextView mTextLeft;  		         public TextView mTextRight;  		     }  		     //屏幕左边TextView 		     private  String[] left=new String[]{"国家","省","地区"};  		     // 屏幕右边TextView		    private String[] Right = new String[]{"中国","山东","滨州"};}


这里我们自己定义了适配器,对于适配器后面我们会详细讲解。想添加列表的点击事件:

@Override	protected void onListItemClick(ListView l, View v, int position, long id) {		// TODO Auto-generated method stub		Toast.makeText(this, "你点击了"+left[position]+Right[position], Toast.LENGTH_SHORT).show();	}

运行效果:





  相关解决方案