欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

安卓学习笔记(一) 用适配器适配ListView和ArrayList——安卓第二天,安卓listview

来源: javaer 分享于  点击 36833 次 点评:235

安卓学习笔记(一) 用适配器适配ListView和ArrayList——安卓第二天,安卓listview


列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据    具体的将被映射的字符串,图片,或者基本组件。


destination制作listview


question1为什么要适配器?

answer1:ListView是一连串的“条子”,但是在布局的时候无法确定要布局几个条子,所以只写一个ListView。之后用适配器让每个数据都对应一个条子出来。


根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapterSimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为

SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。


数据库还没看先不管SimpleCursorAdapterArrayAdapter比较弱,也不说了,下面只说SimpleAdapter.


分成三步走:

第一步:造数据

这个怎么个造法根据需求来,最后存入一个像ArrayList<HashMap<String,String>>的东西里去。

第二步:适配器上场

        SimpleAdapter mSchedule = new SimpleAdapter(context, //activity的context
        		                                    getlist(intinum),//数据来源 ,第一步造出来的数据
        		                                    R.layout.my_listitem,//ListItem的XML实现,对应一下布局
        		                                    new String[] {"ItemTitle", "ItemText"},//动态数组与ListItem对应的子项
							   new int[] {R.id.linearText1,R.id.linearText2});//ListItem的XML文件里面的两个TextView ID

这样理解:从数据里找到String[]的一个对应项,得到真正要显示的数据,

显示在哪里呢?显示在new int[]的那两个地方。

显示在哪个ListView里呢?去R.layout.XX那里去找。

最后放在context对应的activity里。

第三步

//添加并且显示
        list.setAdapter(mSchedule);



讲完了,周末大放送,学长说BaseAdapter也很好用,我还不清楚它和前几个的关系。用起来有个不同。

-----------

今天看博文,好像和其他Adapter也是一个并列的关系      ——140718更新

-----------

三步走

第一步:找个类继承BaseAdapter 和 造数据(这个不用说和上面一样)

成了这个样子

class a extends BaseAdapter{

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@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 arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		return null;
	}
	
}
其中我们主要要写getCount()getView这两个方法。

getCount得到数据数目。getView得到每一“条”的样子

第二步:适配器上场

public View getView(int position, View convertView, ViewGroup parent) {
<span >			</span>


<span >			</span>LayoutInflater mInflater = LayoutInflater.from(context);
<span >			</span>ViewHolder holder = null;//这里是一窝蜂绑定
<span >			</span>if (convertView == null) {
<span >				</span>
<span >				</span>holder=new ViewHolder();  
<span >				</span>
<span >				</span>convertView = mInflater.inflate(R.layout.vlist2, null);
<span >				</span>holder.img = (ImageView)convertView.findViewById(R.id.img);
<span >				</span>holder.title = (TextView)convertView.findViewById(R.id.title);
<span >				</span>holder.info = (TextView)convertView.findViewById(R.id.info);
<span >				</span>holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
<span >				</span>convertView.setTag(holder);
<span >				</span>
<span >			</span>}else {
<span >				</span>
<span >				</span>holder = (ViewHolder)convertView.getTag();
<span >			</span>}
<span >			</span>
<span >			</span>//这里是把数据送到绑定好的地方
<span >			</span>holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
<span >			</span>holder.title.setText((String)mData.get(position).get("title"));
<span >			</span>holder.info.setText((String)mData.get(position).get("info"));
<span >			</span>
<span >			</span>holder.viewBtn.setOnClickListener(new View.OnClickListener() {
<span >				</span>
<span >				</span>@Override
<span >				</span>public void onClick(View v) {
<span >					</span>showInfo();<span >					</span>
<span >				</span>}
<span >			</span>});
<span >			</span>
<span >			</span>
<span >			</span>return convertView;//大功告成,得到一条,他就是这样一条一条绘制出来的
<span >		</span>}
<span >	</span>


<span >	</span>class ViewHolder {
<span >		</span>ImageView img_ObjImg;
<span >		</span>TextView txtVw_ObjName;
<span >		</span>TextView txtVw_ObjNameContent;
<span >		</span>TextView txtVw_ObjDescribe;
<span >	</span>}
}

第三步:添加并且显示        

list.setAdapter(mSchedule);在“主”类中写MyAdapter adapter = new MyAdapter(context);
setListAdapter(adapter);

一瞬间adapter把所有事情都搞定了。


列表项的一个例子

<?xml version="1.0" encoding="utf-8"?>  
<!-- 这是列表项的布局文件,每一行长什么样子,修改这里 -->  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="80dp"  
    android:orientation="horizontal"  
    android:padding="5dip"  
    android:paddingBottom="15dp" >  
  
    <ImageView  
        android:id="@+id/img"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_margin="5dp" />  
  
    <LinearLayout  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:orientation="vertical" >  
  
        <LinearLayout  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:orientation="horizontal" >  
  
            <TextView  
                android:id="@+id/title"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:textColor="#000"  
                android:textSize="20sp" />  
  
            <TextView  
                android:id="@+id/time"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:layout_marginLeft="110dp"  
                android:textColor="#000"  
                android:textSize="18sp" />  
        </LinearLayout>  
  
        <TextView  
            android:id="@+id/info"  
            android:layout_width="wrap_content"  
            android:layout_height="fill_parent"  
            android:layout_marginTop="3dp"  
            android:textColor="#000"  
            android:textSize="15sp" />  
    </LinearLayout>  
  
</LinearLayout>  



下面是一些关于ListView的tip:

1.如果要曾加或减少条子的数量,直接改数据就好了,然后adapter.notifydatasetchanged(),就自动重新绘制更新。

2.ListView也可以设置监听,类似微信聊天的整个条子的监听。   参阅 这个函数:onItemClick()

相关文章

    暂无相关文章

用户点评