ListView中显示不同的item

来源:互联网 发布:mac 垃圾清理软件 编辑:程序博客网 时间:2024/05/16 11:38

ListView中显示不同的item,一般应用在插广告什么的:


直接说思路:

材料:

一个主页面---------------activity_list_man   下嵌套个ListView

若干个子页面------------ListView的item实现:取名为:listview_one_item  和listview_two_item

一个主页面对应的Activity-------------------ListMainActivity

一个设置ListView的适配器-----------------MyAdapter

还有就是集合实体的对象:渲染适配器的------------------List<MyClass>



大概大的方面就是这几个东西了:

主页面:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.guangbo.ListMainActivity" >
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listview"
        >
</ListView>
</RelativeLayout>


listview对应的若干子页面:

1.listview_one_item :

<?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"
 >
   
<TextView
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="我是文本"
    android:id="@+id/one"
    android:layout_alignParentTop="true"
    />
    <TextView
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="我是文本2"
    android:id="@+id/two"
    android:layout_centerInParent="true"
    />
 
</RelativeLayout>


2.listview_two_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   
<TextView
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="我是文本"
    android:id="@+id/ones"
   
    />
<TextView
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="我是文本"
    android:id="@+id/twos"
   
    />
</LinearLayout>


数据实体类:

public class MyClass implements Serializable{
 private String username;
 private String psw;
 private  int age;
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPsw() {
  return psw;
 }
 public void setPsw(String psw) {
  this.psw = psw;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }

}


我把适配器写在了Activity中,所以一起贴上Activity代码:

public class ListMainActivity extends Activity {

 private ListView listview;
private List<MyClass> list=new ArrayList<MyClass>();
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_list_main);
  
  listview=(ListView)findViewById(R.id.listview);
  list=getDate();
  MyAdapter myadapter=new MyAdapter(ListMainActivity.this);
  listview.setAdapter(myadapter);
  
 }
 
 private List<MyClass> getDate()
 {
  
  List<MyClass> lists=new  ArrayList<MyClass>();
  for(int i=0;i<5;i++)
  {
   MyClass myclass=new MyClass();
  myclass.setPsw("密码"+i);
  myclass.setUsername("账号"+i);
  myclass.setAge(i);
  lists.add(myclass);
  }
  return lists;
 }

 class MyAdapter extends BaseAdapter
 {
  private LayoutInflater mInflater=null;
  private ViewHolder holder;

  public MyAdapter(Context context) {
   this.mInflater = LayoutInflater.from(context);
  }
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return list.size();
  }

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

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

  @Override
  public View getView(int arg0, View convertView, ViewGroup arg2) {
   holder = new ViewHolder();
   if (null == convertView) {
   
   if(arg0%2==0)
    {
     convertView=mInflater.inflate(R.layout.listview_one_item, null);
     holder.one=(TextView) convertView.findViewById(R.id.one);
     holder.two=(TextView)convertView.findViewById(R.id.two);
    }
    else
    {
     convertView=mInflater.inflate(R.layout.listview_two_item, null);
     holder.one=(TextView)convertView.findViewById(R.id.ones);
     holder.two=(TextView)convertView.findViewById(R.id.twos);
   }
    convertView.setTag(holder);
   }
   else
   {
   holder = (ViewHolder) convertView.getTag();
   }
   String username=list.get(arg0).getUsername();
   
  holder.one.setText(list.get(arg0).getUsername());
   holder.two.setText(list.get(arg0).getPsw());
   return convertView;
  }
  
  
 }
  class ViewHolder {
     public TextView one;
        public TextView two;
    
    }
}


搞定:

其实总结起来,做这个效果的最核心是:根据不同的条件,选择不同的Layout,然后填上数据





0 0
原创粉丝点击