listview列表控件,列表项包含文字,图片,选框等等。
使用步骤1:定义主页面xml文件以及listitem用到的xml定义文件
主页面xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:background="@drawable/topbg" android:gravity="center_vertical"> <ListView android:id="@+id/hotfreelistview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/top" android:layout_above="@+id/bottom" android:background="@color/lightbg" android:dividerHeight="1px" android:divider="@color/dividercolor" android:cacheColorHint="#00000000" ></ListView> </LinearLayout>
item 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="wrap_content" android:paddingTop="10dip" android:paddingBottom="10dip" android:paddingLeft="15dip" android:background="@color/greybg" android:orientation="horizontal" android:descendantFocusability="blocksDescendants" android:id="@+id/vlistitem" > <LinearLayout android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="wrap_content" android:id="@+id/linearLayoutleft" android:gravity="center_vertical"> <ImageView android:layout_width="64dip" android:layout_height="64dip" android:id="@+id/img" android:src="@drawable/logo"></ImageView> </LinearLayout> <LinearLayout android:layout_weight="1" android:layout_marginLeft="10dip" android:layout_width="wrap_content" android:id="@+id/linearLayoutright" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:textColor="@color/listviewfontcolor" android:textSize="18dip" android:layout_height="wrap_content" android:id="@+id/title" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="fill_parent" android:text="phoenix" android:visibility="visible"></TextView> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="TextView" android:id="@+id/summary"></TextView> </LinearLayout> <LinearLayout android:layout_weight="0" android:orientation="vertical" android:layout_marginLeft="10dip" android:layout_width="wrap_content" android:id="@+id/LinearLayout01" android:layout_height="fill_parent" android:gravity="center_vertical" android:visibility="gone"> <TextView android:textColor="@color/listviewfontcolor" android:textSize="18dip" android:layout_height="wrap_content" android:id="@+id/TextView01" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="fill_parent" android:text="免费" android:visibility="invisible"></TextView> <!-- <TextView android:layout_height="wrap_content" android:id="@+id/TextView02" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="fill_parent" android:text="共N部"></TextView> --> </LinearLayout> <LinearLayout android:layout_marginLeft="10dip" android:layout_width="wrap_content" android:id="@+id/LinearLayout02" android:layout_height="fill_parent" android:orientation="horizontal" android:gravity="center_vertical" android:visibility="gone"> <Button android:id="@+id/view_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_addition" android:visibility="invisible"></Button> <LinearLayout android:layout_width="8dip" android:layout_height="2dip" android:id="@+id/linearLayout1" android:visibility="invisible"></LinearLayout> </LinearLayout> </LinearLayout>
调用
步骤1引入布局:
public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.recommendapp); super.onCreate(savedInstanceState); }
步骤2定义adapter:
定义ViewHolder供后面定义adapter时调用
public final class ViewHolder{ public ImageView img; public TextView title; public TextView summary; public TextView linkurl; //public TextView info; //public Button viewBtn; //public LinearLayout vlayout; //public TextView isfreetextview; //public ImageView stars; public void setOnClickListener(OnClickListener onClickListener) { // TODO Auto-generated method stub } }
public class MyAdapter extends BaseAdapter{ private LayoutInflater mInflater; private AsyncImageLoader asyncImageLoader; //private ListView listview; public MyAdapter(Context context){ this.mInflater = LayoutInflater.from(context); asyncImageLoader = new AsyncImageLoader(); //一定别忘了要初始化这个类 } @Override public int getCount() { // TODO Auto-generated method stub return mData.size(); } @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(final int position, View convertView, ViewGroup parent) { //ViewCache viewCache; ViewHolder holder = null; if (convertView == null) { holder=new ViewHolder(); convertView = mInflater.inflate(R.layout.vlistrecommendapp, null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.title = (TextView)convertView.findViewById(R.id.title); holder.summary = (TextView)convertView.findViewById(R.id.summary); holder.linkurl = (TextView)convertView.findViewById(R.id.TextView01); //holder.isfreetextview = (TextView)convertView.findViewById(R.id.TextView01); //holder.info = (TextView)convertView.findViewById(R.id.info); //holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); //holder.stars = (ImageView)convertView.findViewById(R.id.imageView1); //holder.vlayout = (LinearLayout)convertView.findViewById(R.id.vlistitem); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } String imageUrl = ((String) mData.get(position).get("packageimage")).trim(); //cover是临时代替使用,实际是要用 //imageUrl.toString(); holder.img.setTag(imageUrl); @SuppressWarnings("unused") Bitmap cachedImage = null; try { cachedImage = asyncImageLoader.loadDrawable(imageUrl, new phoenix.com.AsyncImageLoader.ImageCallback() { public void imageLoaded(Bitmap imageDrawable, String imageUrl) { ImageView imageViewByTag = (ImageView) lv.findViewWithTag(imageUrl); if (imageViewByTag != null) { //imageViewByTag.setImageDrawable(imageDrawable); imageViewByTag.setImageBitmap(imageDrawable); imageViewByTag.getLayoutParams().height = 72; imageViewByTag.getLayoutParams().width = 72; imageViewByTag.setScaleType(ScaleType.FIT_CENTER); imageViewByTag.setBackgroundColor(Color.TRANSPARENT); } //String a = "aaa"; //a.toString(); } }); } catch(Exception e) { e.getMessage().toString(); } if (cachedImage == null) { //Toast.makeText(getApplicationContext(), "a", Toast.LENGTH_SHORT).show(); holder.img.setImageResource(R.drawable.logo); //没有找到图片 }else{ //Toast.makeText(getApplicationContext(), "高度是:"+String.valueOf(this.dip2px(imageheight))+"宽度是:"+String.valueOf(this.dip2px(imagewidth)), Toast.LENGTH_SHORT).show(); //imageView.setImageDrawable(cachedImage); holder.img.setImageBitmap(cachedImage); holder.img.getLayoutParams().height = 72; holder.img.getLayoutParams().width = 72; holder.img.setScaleType(ScaleType.CENTER_CROP); //屏幕宽高 } //holder.img.setBackgroundResource(R.drawable.logo); holder.title.setText((String)mData.get(position).get("appname")); holder.summary.setText((String)mData.get(position).get("summary")); holder.linkurl.setText((String)mData.get(position).get("linkurl")); final String tempurl = (String) holder.linkurl.getText(); holder.summary.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri=Uri.parse(tempurl); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } }); holder.title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri=Uri.parse(tempurl); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } }); holder.img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri=Uri.parse(tempurl); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } }); return convertView; } }
其中涉及到的数据来源定义
private List<Map<String, Object>> mData;
在进行步骤3前要
mData = getData();
比如getData定义从网上解析json
private List<Map<String, Object>> getData() { //*********************************************** ArrayList<Map<String,Object>> books = new ArrayList<Map<String,Object>>(); JSONObject json_book_player; JSONObject temp_book_player; JSONArray son_book_player = null; try { json_book_player = new JSONObject(NetUtil.getRequest(SplashScreen.domain+"/api/Apps", new DefaultHttpClient(new BasicHttpParams()))); temp_book_player = json_book_player.getJSONObject("paramz"); son_book_player = temp_book_player.getJSONArray("apps"); for(int i=0;i<son_book_player.length();i++) { //注意,此处得到的记录顺序是乱的,一定要重新处理 JSONObject jsonObject2_book_player = (JSONObject)son_book_player.opt(i); HashMap<String,Object> map = new HashMap<String,Object>(); map.put("packageimage", SplashScreen.domain+jsonObject2_book_player.getString("cover").trim()); //1 map.put("linkurl", URLDecoder.decode(jsonObject2_book_player.getString("android"))); //map.put("packageid", jsonObject2_book_player.getInt("packageid")); //map.put("stars", jsonObject2_book_player.getInt("stars")); //星评级 //map.put("isfree", jsonObject2_book_player.getString("isfree")); //是否免费 map.put("summary", URLDecoder.decode(jsonObject2_book_player.getString("appsummary"),"utf-8")); map.put("appname", URLDecoder.decode(jsonObject2_book_player.getString("appname"),"utf-8")); //map.put("thumb", SplashScreen.domain+jsonObject2_book_player.getString("thumb")); books.add(map); } } catch (Exception e) { //Toast.makeText(getApplicationContext(),"error occused...", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } return books; }
步骤3 将listview和adapter联系起来:
MyAdapter adapter; ListView lv; adapter = new MyAdapter(RecommendApp.this); lv.setAdapter(adapter);