在ListActivity中显示图标_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 在ListActivity中显示图标

在ListActivity中显示图标

 2013/11/19 3:25:45  MSTK  博客园  我要评论(0)
  • 摘要:在ListActivity中显示图标,好像并不复杂,实现起来却不轻松。首先,定义列表中的每一行,这里不是用xml文件定义,而是用一个类定义,CheckBox、ImageView、TextView等控件以addView的方法添加。//apk列表的一行classitem_apkextendsLinearLayout{publicCheckBoxchk_apk;publicTextViewtxt_name;publicTextViewtxt_flag;publicImageViewimg_apk
  • 标签:

在ListActivity中显示图标,好像并不复杂,实现起来却不轻松。

首先,定义列表中的每一行,这里不是用xml文件定义,而是用一个类定义,CheckBox、ImageView、TextView等控件以addView的方法添加。

class="brush:java;gutter:true;">//apk列表的一行
class item_apk extends LinearLayout{
	
	public CheckBox chk_apk;
	public TextView txt_name;  
	public TextView txt_flag;
	public ImageView img_apk; 
	 
	public item_apk(Context ctx, String item_name, String item_flag, Drawable item_draw)
	{
		 
		super(ctx);
		this.setOrientation(HORIZONTAL);
		
		chk_apk = new CheckBox(ctx);
		addView(chk_apk,
				new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),60));		
		 
		img_apk = new ImageView(ctx);
		img_apk.setImageDrawable(item_draw);
		addView(img_apk,
				new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),60));
		 
		txt_name = new TextView(ctx);
		txt_name.setText(item_name);
		addView(txt_name,
				new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.4),60));
		 
		txt_flag = new TextView(ctx);
		txt_flag.setText(item_flag);
		addView(txt_flag,
				new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),60));
		 
	 }

}

然后,是定义列表,同样,也是用一个类来定义,这里的类继承自BaseAdapter。

// apk列表
class list_apk extends BaseAdapter{
	
	 private Context ctx;
            private List<item_apk> list_data;
	
	public list_apk(Context context){
		
		ctx = context;
		list_data = new ArrayList<item_apk>();
		
	}

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

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

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

        item_apk my_item; 
        
        if (convertView==null) 
        {  
        	my_item = new item_apk(ctx,
        			(String)list_data.get(position).txt_name.getText(),
        			(String)list_data.get(position).txt_flag.getText(),
            		list_data.get(position).img_apk.getDrawable());  
        }
        else 
        {  
        	my_item = (item_apk)convertView;  
        	my_item.txt_name = list_data.get(position).txt_name;  
        	my_item.txt_flag = list_data.get(position).txt_flag; 
        	my_item.img_apk = list_data.get(position).img_apk;  
        }  
        return my_item; 
	
	}
	
    public void addItem(String txt_name, String txt_flag, Drawable ico_apk)
    {  
    	list_data.add(new item_apk(ctx,txt_name,txt_flag,ico_apk));	            	
    }
    
}

最后,是Activity的类,这里的Activity类的onCreate(Bundle savedInstanceState)里面没有setContentView()方法,取而代之的是setListAdapter()方法。

public class apk extends ListActivity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		
        list_apk list_ada =  new list_apk(this);
        
		// 包管理器
		PackageManager pm = getPackageManager();
		//获取手机内所有应用
		List<PackageInfo> pi = pm.getInstalledPackages(0); 
		
		list_ada.addItem("应用名称",
				"是否系统应用", 
				null);	
		
		for (int i=0; i<pi.size(); i++){
			
			PackageInfo pii = (PackageInfo) pi.get(i);
			String is_sys;
			Drawable icon;
			
			if ((pii.applicationInfo.flags & pii.applicationInfo.FLAG_SYSTEM) <= 0)
				is_sys = "否";
			else
				is_sys = "是";

			if (pii.applicationInfo.loadIcon(pm)!=null)
				icon = (Drawable)pii.applicationInfo.loadIcon(pm);
			else
				icon = (Drawable) getResources().getDrawable(R.drawable.ic_launcher);

			
			list_ada.addItem(String.valueOf(pii.applicationInfo.loadLabel(pm)),
					is_sys, 
					icon);			
			
		}
        
        setListAdapter(list_ada);

	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

整个Activity都是由类构成,没有用到一个xml布局文件。

运行效果如下。

  • 相关文章
发表评论
用户名: 匿名