为ListView设置不同的布局

来源:互联网 发布:linux防御cc攻击 编辑:程序博客网 时间:2024/06/09 18:12

Demo描述:

让第一个item显示图片,后面的item都显示文字。

为了达到此种目的,需要重写BaseAdapter中的getViewTypeCount( )和getItemViewType(int position)方法。

1: 在getViewTypeCount中指定一共有几种不同的item,在此返回几即可。比如是2,就返回2即可。

2:在getItemViewType(int position)中需要依据position的不同返回不同的type。


在getView( )方法针对不同的Type为item设置布局:

currentType = getItemViewType(position);

依据Type的不同为Item设置布局


 
public class MainActivity extends Activity {      private ListView mListView;      private HashMap<String, Object> mHashMap;      private ArrayList<HashMap<String, Object>> mArrayList;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          init();      }      private void init(){          mArrayList=new ArrayList<HashMap<String,Object>>();          mListView=(ListView) findViewById(R.id.listview);          addDataForListView();          mListView.setAdapter          (new ListViewAdapter(MainActivity.this, mArrayList, R.layout.othersitem, new String []{"content"}, new int []{R.id.textView}));          mListView.setOnItemClickListener(new ItemClickListenerImpl());      }      private void addDataForListView(){          for (int i = 0; i < 30; i++) {              mHashMap=new HashMap<String, Object>();              mHashMap.put("content", "This is ---> "+i);              mArrayList.add(mHashMap);          }      }        private class ItemClickListenerImpl implements OnItemClickListener {          @Override          public void onItemClick(AdapterView<?> parent, View view, int position,long arg) {              System.out.println("OnItemClickListener position="+position);            }      }  }  
ListViewAdapter如下:
 
package cc.testlistview;  import java.util.List;  import java.util.Map;  import android.content.Context;  import android.view.LayoutInflater;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.ViewGroup;  import android.widget.BaseAdapter;  import android.widget.ImageView;  import android.widget.TextView;    public class ListViewAdapter extends BaseAdapter {      private List<? extends Map<String, ?>> mArrayList;      private int resource;      private LayoutInflater mLayoutInflater;            private final int TYPE_COUNT=2;      private final int FIRST_TYPE=0;      private final int OTHERS_TYPE=1;      private int currentType;      public ListViewAdapter(Context context,List<? extends Map<String, ?>> data, int resource, String[] from,int[] to) {          this.mArrayList=data;          this.resource=resource;          mLayoutInflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);      }            @Override      public int getCount() {          if (mArrayList==null) {              return 0;          } else {              return (mArrayList.size()+1);          }                }            @Override      public Object getItem(int position) {          if (mArrayList==null) {              return null;          } else {              if (position>0) {                  return mArrayList.get(position-1);              } else {                  return mArrayList.get(position+1);              }          }      }            @Override      public long getItemId(int position) {          return position;      }            ///////////////////////////////////////////////////////      @Override      public int getViewTypeCount() {          return TYPE_COUNT;      }            @Override      public int getItemViewType(int position) {          if (position==0) {              return FIRST_TYPE;          } else {              return OTHERS_TYPE;          }      }     ///////////////////////////////////////////////////////            @Override      public View getView(int position, View convertView, ViewGroup parent) {          View firstItemView = null;          View othersItemView=null;          //获取到当前位置所对应的Type          currentType= getItemViewType(position);          System.out.println("type="+currentType);          if (currentType== FIRST_TYPE) {              firstItemView = convertView;              FirstItemViewHolder firstItemViewHolder=null;              if (firstItemView==null) {                  System.out.println("firstItemView==null ");                  firstItemView = mLayoutInflater.inflate(R.layout.firstitem,null);                  firstItemView.setOnClickListener(new OnClickListener() {                      @Override                      public void onClick(View view) {                          System.out.println("=====click first item=======");                      }                  });                  firstItemViewHolder=new FirstItemViewHolder();                  firstItemViewHolder.imageView=(ImageView) firstItemView.findViewById(R.id.imageView);                  firstItemView.setTag(firstItemViewHolder);                } else {                  System.out.println("firstItemView!=null ");                  System.out.println("111 getClass="+firstItemView.getTag().getClass().toString());                  firstItemViewHolder=(FirstItemViewHolder) firstItemView.getTag();              }                            if (firstItemViewHolder.imageView!=null) {                  firstItemViewHolder.imageView.setImageResource(R.drawable.ic_launcher);              }                            convertView=firstItemView;            } else {              othersItemView = convertView;              OthersViewHolder othersViewHolder=null;              if (othersItemView==null) {                  System.out.println("othersItemView==null ");                  othersItemView = mLayoutInflater.inflate(R.layout.othersitem,null);                  othersViewHolder=new OthersViewHolder();                  othersViewHolder.textView=(TextView) othersItemView.findViewById(R.id.textView);                  othersItemView.setTag(othersViewHolder);              } else {                  System.out.println("othersItemView!=null ");                  System.out.println("222 getClass="+othersItemView.getTag().getClass().toString());                  othersViewHolder=(OthersViewHolder) othersItemView.getTag();              }                            if (mArrayList!=null) {                  if (othersViewHolder.textView!=null) {                      othersViewHolder.textView.setText((String)(mArrayList.get(position-1).get("content")));                  }                                }                            convertView=othersItemView;            }            return convertView;      }                //第一个Item的ViewHolder      private class FirstItemViewHolder{          ImageView imageView;      }            //除第一个Item以外其余Item的ViewHolder      private class OthersViewHolder{          TextView textView;      }  }  

0 0