zoukankan      html  css  js  c++  java
  • 在ListActivity中显示图标

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

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

    //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布局文件。

    运行效果如下。

  • 相关阅读:
    C#项目间循环引用的解决办法,有图有真相
    打破关注自己的门
    引用AForge.video.ffmpeg,打开时会报错:找不到指定的模块,需要把发行包第三方文件externalsffmpegin里的dll文件拷到windows的system32文件夹下。
    Gs_Class.Gs_DataFunction数据操作类库20160225
    Gs_Class._BaseQueryWeb查询页面基类(aspx.net)
    关于开钱箱(不是用螺丝刀子开)
    处理模糊查询时读取url地址参数变化的情况
    jeecg单步调试
    jeecg安装——mysql数据库创建+手动执行初始化脚本
    小程序动画效果
  • 原文地址:https://www.cnblogs.com/mstk/p/3430425.html
Copyright © 2011-2022 走看看