自定义listview的布局

来源:互联网 发布:js排序函数 编辑:程序博客网 时间:2024/05/14 02:31

一、自定义listview的布局,首先是布局文件mylist.xml:

<?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="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         >

        <TextView
            android:id="@+id/subject"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:singleLine="true"
            android:maxWidth="350sp"
            android:minWidth="50sp"
            android:text="textview1"
            android:ellipsize="end"
            android:textSize="25sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/insert_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/info_type"
            android:layout_alignBottom="@+id/info_type"
            android:layout_alignParentRight="true"
            android:layout_marginRight="27dp"
            android:gravity="right"
            android:singleLine="true"
            android:text="textview3"
            android:textSize="15sp"
            android:textStyle="normal" />

        <TextView
            android:id="@+id/info_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/subject"
            android:layout_marginRight="14dp"
            android:layout_toLeftOf="@+id/insert_time"
            android:singleLine="true"
            android:text="textview2"
            android:textSize="15sp"
            android:textStyle="normal" />

    </RelativeLayout>

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:singleLine="false"
        android:maxLines="2"
        android:ellipsize="end"
        android:textStyle="normal" />

 

</LinearLayout>

------------------------------------------------------------------

二、其次是在自己定义的adapter中加载布局文件,并根据需要设置显示样子

 

public class NoticeAdapter extends BaseAdapter {

  private Context context ;
  private LayoutInflater listContainer;
  private Handler listHandler;
  
  public final class ListItemView{
   public TextView subject;
   public TextView info_type;
   public TextView insert_time;
   public TextView content;

  }
  
  public NoticeAdapter(Context context,Handler listHandler){
   this.context = context;
   this.listHandler = listHandler;
         listContainer = LayoutInflater.from(context);    //创建视图容器并设置上下文


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

  @Override
  public Object getItem(int arg0) {
   // TODO Auto-generated method stub
   return arg0;
  }

  @Override
  public long getItemId(int arg0) {
   // TODO Auto-generated method stub
   return arg0;
  }

  
        
      /** 
       * 显示物品详情 
       * @param clickID 
       */ 
      private void showDetailInfo(int clickID) {  
          new AlertDialog.Builder(context)  
          .setTitle("公告详情:" + listItems.get(clickID).getSubject())  
          .setMessage(listItems.get(clickID).getContent())                
          .setPositiveButton("确定", null)  
          .show();  
      } 
  

   
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub  
           Log.v("method", "getView");  
          
          //自定义视图  
           ListItemView  listItemView = null;  
           if (convertView == null) {  
              listItemView = new ListItemView();   
              //获取list_item布局文件的视图  
               convertView = listContainer.inflate(R.layout.mylist, null);  
              //获取控件对象  
               listItemView.info_type = (TextView)convertView.findViewById(R.id.info_type);  
               listItemView.subject = (TextView)convertView.findViewById(R.id.subject);  
               listItemView.insert_time = (TextView)convertView.findViewById(R.id.insert_time);  
               listItemView.content= (TextView)convertView.findViewById(R.id.content);
               //设置控件集到convertView  
               convertView.setTag(listItemView);  
           }else {  
               listItemView = (ListItemView)convertView.getTag();  
           }  
   //      Log.e("image", (String) listItems.get(position).get("title"));  //测试  
   //      Log.e("image", (String) listItems.get(position).get("info"));  
             
           //设置文字和图片  
           if (listItems.get(position).getStatus()==1) {
            listItemView.subject.setText(listItems.get(position).getSubject());
            //设置粗体与否
     }
           else {
            listItemView.subject.setText(listItems.get(position).getSubject());
            //设置粗体与否
     }
            
           if(listItems.get(position).getInfo_type().equals("1")){
            listItemView.info_type.setText("number1"); 
            listItemView.info_type.setTextColor(Color.rgb(67, 188, 38));
           }
           else {
            listItemView.info_type.setText("number2");
            listItemView.info_type.setTextColor(Color.rgb(255, 174, 0));
     }
           listItemView.insert_time.setText("time ");
           listItemView.content.setText("正文信息");  

     
  
 
          
           return convertView;
  }

 

 }

--------------------------------------------------------------------------------------------------

三、用listview设置dapter,并设置监听事件

   NoticeAdapter noticeAdapter = new NoticeAdapter(this,listHandler);
    itemsListView.setAdapter(noticeAdapter);

itemsListView.setOnItemClickListener(this);

 

 private Handler listHandler = new Handler(){
  public void handleMessage(Message msg) {
//在这个handler中要处理的事情,这个自己写啦
  };
 };

--------------------------------------------------------------------------------------------------

四、根据点击事情获取要处理的事情

 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  System.out.println("点击位置"+arg2);
//这样就能获得listview中点击了那一项
   
 
   }

0 0