关于UI布局中,listView控件的使用:(该篇的功能是实现简单的微博随便看看)
1:创建数据源
2:创建适配器
3:建立Adapter和数据的关联,建立AdapterView和Adapter之间的关联。
下面分别摘取几个比较重要的代码:
MainActivity.java:
1 import java.text.SimpleDateFormat; 2 import java.util.ArrayList; 3 import java.util.Date; 4 import java.util.List; 5 import java.util.Random;//导入Random,方便下面对访问人气的随机数生成 6 7 import bzu.edu.hou.adapter.ArticleAdapter; 8 import bzu.edu.hou.adapter.Messages; 9 import bzu.edu.hou.view.MyListView; 10 import android.R.integer; 11 import android.os.Bundle; 12 import android.os.Handler; 13 import android.os.Message; 14 15 16 import android.app.Activity; 17 import android.content.res.TypedArray; 18 import android.view.Menu; 19 import android.view.Window; 20 import android.widget.ArrayAdapter; 21 import android.widget.BaseAdapter; 22 import android.widget.LinearLayout; 23 24 public class MainActivity extends Activity { 25 26 private MyListView mylistview=null; 27 private List<Messages> list_msg=null; 28 private BaseAdapter adapter=null; 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 requestWindowFeature(Window.FEATURE_NO_TITLE); 33 setContentView(R.layout.activity_main); 34 35 init(); 36 if(list_msg==null){//判断是否为空 37 getData(); 38 } 39 40 41 adapter=new ArticleAdapter(this,list_msg); 42 43 44 mylistview.setAdapter(adapter); 45 } 46 47 48 49 private void getData() { 50 51 //获得xml的资源 52 String names[]; 53 String article[]; 54 TypedArray img; 55 int i; 56 57 names=getResources().getStringArray(R.array.name); 58 article=getResources().getStringArray(R.array.article); 59 img=getResources().obtainTypedArray(R.array.head_photo); 60 61 list_msg=new ArrayList<Messages>(); 62 for(i=0;i<names.length;i++){ 63 Messages message=new Messages(); 64 message.setImg(img.getDrawable(i)); 65 message.setName(names[i]); 66 message.setArticel(article[i]); 67 message.setRq("人气:"+String.valueOf(new Random().nextInt(1000))); 68 Date date=new Date(); 69 SimpleDateFormat simple=new SimpleDateFormat("MM-dd");//格式化生成的时间 70 message.setTime(simple.format(date)); 71 list_msg.add(message); 72 } 73 } 74 private void init() { 75 76 mylistview=(MyListView)findViewById(R.id.myListView1); 77 78 }
79 }
2:适配器:
1 import java.util.List; 2 import android.content.Context; 3 import android.view.LayoutInflater; 4 import android.view.View; 5 import android.view.ViewGroup; 6 import android.widget.BaseAdapter; 7 import android.widget.ImageView; 8 import android.widget.LinearLayout; 9 import android.widget.TextView; 10 /××如果AiticleAdapter继承的是ArrayAdapter就只需要重写getView()方法,如果继承的是BaseAdapter就需要重写getCount(),getItem()等方法。××/ 11 public class ArticleAdapter extends BaseAdapter 12 { 13 private List<Messages> list_mes = null; 14 private Context context; 15 16 public ArticleAdapter(Context context, List<Messages> list_mes) 17 { 18 this.list_mes = list_mes; 19 this.context = context; 20 } 21 22 @Override 23 public int getCount() 24 { 25 // TODO Auto-generated method stub 26 return list_mes.size(); 27 } 28 29 @Override 30 public Object getItem(int position) 31 { 32 return list_mes.get(position); 33 } 34 35 @Override 36 public long getItemId(int position) 37 { 38 return position; 39 } 40 41 @Override 42 public View getView(int position, View convertView, ViewGroup parent) 43 { 44 ListItem listitem; 45 if (convertView == null)//此处加上对convertView的判断操作 46 { 47 convertView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.list_layout, null);//将后面需要显示的数据进行压入布局中。 48 49 listitem = new ListItem(); 50 listitem.img = (ImageView) convertView.findViewById(R.id.head_img); 51 listitem.name = (TextView) convertView.findViewById(R.id.name); 52 listitem.time = (TextView) convertView.findViewById(R.id.time);//注意:此处查找组件不同于以前的查找组件。 53 listitem.rq = (TextView) convertView.findViewById(R.id.rq); 54 listitem.article = (TextView) convertView.findViewById(R.id.article); 55 56 convertView.setTag(listitem); 57 } else 58 { 59 listitem = (ListItem) convertView.getTag(); 60 } 61 62 listitem.img.setImageDrawable(list_mes.get(position).getImg()); 63 listitem.name.setText(list_mes.get(position).getName()); 64 listitem.time.setText(list_mes.get(position).getTime()); 65 listitem.rq.setText(list_mes.get(position).getRq()); 66 listitem.article.setText(list_mes.get(position).getArticel()); 67 return convertView; 68 } 69 70 public class ListItem 71 { 72 ImageView img; 73 TextView name; 74 TextView time; 75 TextView rq; 76 TextView article; 77 } 78 }
3:布局文件:
在显示布局中,无非是实现布局的嵌套。如:list_layout.xml:在该布局中,使用线性布局,相对布局,ImageView等层层嵌套达到预期的效果。在布局嵌套中,应该明确布局间的关系。(但:下面代码有个不足之处:对于text文本的引用,应该尽量在string.xml中进行引用,下面采用了硬编码方式,不值得提倡。)
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:padding="10dip" 6 android:orientation="vertical" > 7 <RelativeLayout 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 > 11 <ImageView 12 android:id="@+id/head_img" 13 android:src="@drawable/p1" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_marginTop="5dip" 17 android:layout_alignParentLeft="true" 18 /> 19 <LinearLayout 20 android:layout_width="match_parent" 21 android:layout_height="wrap_content" 22 android:layout_toRightOf="@+id/head_img" 23 android:layout_marginLeft="7dip" 24 android:orientation="vertical"> 25 <RelativeLayout 26 android:layout_width="match_parent" 27 android:layout_height="wrap_content"> 28 <TextView 29 android:id="@+id/name" 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:layout_alignParentLeft="true" 33 android:textColor="#FF6666" 34 android:textSize="16sp" 35 android:typeface="sans" 36 android:textStyle="bold" 37 android:text="星星"/> 38 <TextView 39 android:id="@+id/time" 40 android:layout_width="wrap_content" 41 android:layout_height="wrap_content" 42 android:layout_toRightOf="@id/name" 43 android:layout_alignBottom="@id/name" 44 android:layout_marginLeft="5dip" 45 android:textColor="#696969" 46 android:textSize="12sp" 47 android:text="12:11"/> 48 49 <TextView 50 android:id="@+id/rq" 51 android:layout_width="wrap_content" 52 android:layout_height="wrap_content" 53 android:layout_alignParentRight="true" 54 android:layout_centerVertical="true" 55 android:textSize="9sp" 56 android:text="123"/> 57 </RelativeLayout> 58 <LinearLayout 59 android:layout_width="match_parent" 60 android:layout_height="wrap_content" 61 android:layout_marginTop="5dip"> 62 <TextView 63 android:id="@+id/article" 64 android:layout_width="match_parent" 65 android:layout_height="wrap_content" 66 android:minHeight="50px" 67 android:textSize="12sp" 68 android:text="种不同的1"/> 69 </LinearLayout> 70 </LinearLayout> 71 </RelativeLayout> 72 </LinearLayout>
该程序实现的效果如下所示:
这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。