ListView的学习
来源:互联网 发布:网络运营商怎么设置 编辑:程序博客网 时间:2024/06/15 09:23
ListView的学习
创建ListView的步骤
1:布局里创建ListView控件
2:给ListView创建每一个的item布局
3:准备数据源
4:在Adapter里适配数据
5:给ListView设置适配器
适配器里的4个抽象方法:
getCount(); 返回数据源的个数
getItem();返回条目
getItemId();返回条目id
getView();//适配器里最重要的方法,设置数据适配的过程.
一开始获取LayoutInflater的实例,用它的实例来获取item布局的layout
然后获取控件 设置数据 返回view
最简单的listview
public class MainActivity extends AppCompatActivity { private List<String> mAppName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView mListView = (ListView) findViewById(R.id.list_view); mAppName = new ArrayList<>(); mAppName.add("QQ"); mAppName.add("旺旺"); mAppName.add("喵喵"); mListView.setAdapter(new mAdapter()); } class mAdapter extends BaseAdapter{ @Override public int getCount() { return mAppName.size(); } @Override public Object getItem(int position) { return mAppName.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { /** * 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入; 2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。 获得 LayoutInflater 实例的三种方式: 1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater() 2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 3. LayoutInflater inflater = LayoutInflater.from(context); */ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_app_view,null); ImageView mIcon = (ImageView) convertView.findViewById(R.id.item_app_icon); TextView mText = (TextView)convertView.findViewById(R.id.item_app_text); mText.setText(mAppName.get(position)); return convertView; } }
获取系统已安装的列表Demo和添加头布局,listView点击事件
转自:http://blog.csdn.net/maoxiao1229/article/details/38301657/#comments方法1:ResolveInfo获取全部应用: PackageManager packageManager = getPackageManager(); Intent mIntent = new Intent(Intent.ACTION_MAIN, null); mIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> listAllApps = packageManager.queryIntentActivities(mIntent, 0); 判断是否系统应用: ResolveInfo appInfo = listAllApps.get(position); String pkgName = appInfo.activityInfo.packageName;//获取包名 //根据包名获取PackageInfo mPackageInfo;(需要处理异常) mPackageInfo = mContext.getPackageManager().getPackageInfo(pkgName, 0); if ((mPackageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { //第三方应用 } else { //系统应用 } 获取相关信息: ResolveInfo mResolveInfo ; 获取包名: mResolveInfo.activityInfo.packageName; 获取icon: mResolveInfo.loadIcon(packageManager); 获取应用名: mResolveInfo.loadLabel(packageManager).toString(); 方法2:PackageInfo获取全部应用: PackageManager packageManager = this.getPackageManager(); List<PackageInfo> packageInfoList = packageInfoList .getInstalledPackages(0); 判断是否系统应用: List<PackageInfo> apps = new ArrayList<PackageInfo>(); for (int i = 0; i < packageInfoList.size(); i++) { PackageInfo pak = (PackageInfo)packageInfoList.get(i); //判断是否为系统预装的应用 if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { // 第三方应用 apps.add(pak); } else { //系统应用 } } 获取相关信息: PackageInfo mPackageInfo; 获取包名: mPackageInfo.packageName 获取icon: mPackageInfo.getApplicationIcon(applicationInfo); 获取应用名: mPackageInfo.getApplicationLabel(applicationInfo); 获取使用权限: mPackageInfo.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions;
跳转系统应用
//获取包名 String packageName = mAppInfos.get(position).activityInfo.packageName; //获取应用名 String className = mAppInfos.get(position).activityInfo.name; //通过调用Intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务。 //实例化一个ComponentName需要两个参数,第一个参数是要启动应用的包名称,这个包名称是指清单文件中列出的应用的包名称: ComponentName componentName = new ComponentName(packageName,className); Intent intent = new Intent(); intent.setComponent(componentName); startActivity(intent);
Demo程序:
public class MainActivity extends AppCompatActivity { private List<ResolveInfo> mAppInfos; private ListView mListView; private PackageManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initListener(); } private void initView() { mListView = (ListView) findViewById(R.id.list_view); } private void initData() { //给ListView添加头布局 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View inflate = inflater.inflate(R.layout.item_header_view,null); mListView.addHeaderView(inflate); //获取包管理器实例 manager = getPackageManager(); Intent mIntent = new Intent(Intent.ACTION_MAIN, null); mIntent.addCategory(Intent.CATEGORY_LAUNCHER); //获取系统所有app信息 mAppInfos = manager.queryIntentActivities(mIntent, 0); mListView.setAdapter(new mAdapter()); } private void initListener() { //给listView设置条目点击事件 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //获取包名 String packageName = mAppInfos.get(position).activityInfo.packageName; //获取应用名 String className = mAppInfos.get(position).activityInfo.name; //通过调用Intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务。 //实例化一个ComponentName需要两个参数,第一个参数是要启动应用的包名称,这个包名称是指清单文件中列出的应用的包名称: ComponentName componentName = new ComponentName(packageName,className); Intent intent = new Intent(); intent.setComponent(componentName); startActivity(intent); } }); } class mAdapter extends BaseAdapter{ @Override public int getCount() { return mAppInfos.size(); } @Override public Object getItem(int position) { return mAppInfos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_app_view,null); ImageView mIcon = (ImageView) convertView.findViewById(R.id.item_app_icon); TextView mText = (TextView)convertView.findViewById(R.id.item_app_text); //获取应用名 String appName = mAppInfos.get(position).activityInfo.loadLabel(manager).toString(); //获取应用图片资源路径 Drawable drawable = mAppInfos.get(position).activityInfo.loadIcon(manager); //设置 mText.setText(appName); mIcon.setImageDrawable(drawable); return convertView; } }}--------------------给getView增加ViewHolder优化点listView的性能---------- public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); //没有复用view的时,使用viewholder保存找到的空间,下次复用不需要再次查找. if(convertView == null){ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_app_view,null); holder.mDrawable = (ImageView) convertView.findViewById(R.id.item_app_icon); holder.mAppName = (TextView)convertView.findViewById(R.id.item_app_text); //给复用view设置标记 convertView.setTag(holder); }else{ //取出标记中的holder holder = (ViewHolder) convertView.getTag(); } //获取应用名 String appName =mAppInfos.get(position).activityInfo.loadLabel(manager).toString(); //获取应用图片资源路径 Drawable appDrawable = mAppInfos.get(position).activityInfo.loadIcon(manager); holder.mAppName.setText(appName); holder.mDrawable.setImageDrawable(appDrawable); return convertView; } } class ViewHolder { TextView mAppName; ImageView mDrawable; }
ListViewDemo异步请求网络,加载到listView中
public class RequestActivity extends AppCompatActivity{ private List<lessonInfo> lessonInfos ; private static final String TAG = "RequestActivity"; private final String STATUS; private final String MSG; private final String NAME; private ListView mListView; public RequestActivity() { STATUS = "status"; MSG = "msg"; NAME = "name"; } @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); new RequestAsyncTask().execute(); } private void initView() { mListView = (ListView) findViewById(R.id.list_view); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View footView = inflater.inflate(R.layout.item_header_view, null); //添加脚布局 mListView.addFooterView(footView); } class RequestAsyncTask extends AsyncTask<Void,Integer,String> { @Override protected void onPreExecute() { super.onPreExecute(); //Loading } //在异步里请求数据 @Override protected String doInBackground(Void... params) { return request(getString(R.string.request_url)); } @Override protected void onPostExecute(String result) { //Loding结束,刷新数据,处理界面 lessonResult lessonResult = new lessonResult(); try { JSONObject jsonObject = new JSONObject(result); String status = jsonObject.getString(STATUS); String msg = jsonObject.getString(MSG); lessonResult.setmMessage(msg); lessonResult.setmStatus(status); List<lessonInfo> lessonInfos = new ArrayList<>(); JSONArray dataArray = jsonObject.getJSONArray("data"); for (int i = 0; i < dataArray.length(); i++) { lessonInfo lessonInfo = new lessonInfo(); JSONObject tempJsonObject = (JSONObject) dataArray.get(i); lessonInfo.setmName(tempJsonObject.getString("name")); lessonInfos.add(lessonInfo); Log.i(TAG, "onPostExecute: 11111111111111"); } lessonResult.setmLessInfos(lessonInfos); } catch (JSONException e) { e.printStackTrace(); } //设置适配器 mListView.setAdapter(new RequestAdapter(RequestActivity.this,lessonResult.getmLessInfos())); } } //请求网络,拿到数据 private String request(String stringUrl) { try { URL url = new URL(stringUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(30000);//设置连接超时时间 conn.setRequestMethod("GET");//设置请求方式 int Code = conn.getResponseCode();//获取响应吗 if(Code == HttpURLConnection.HTTP_OK){//请求成功 //开始下载 InputStreamReader isr = new InputStreamReader(conn.getInputStream()); BufferedReader br = new BufferedReader(isr); //用一个StringBuilder存储数据 StringBuilder sb = new StringBuilder(); String line ;//读取每行数据 while ((line =br.readLine()) !=null){ sb.append(line); } return sb.toString(); }else{ } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }}
public class RequestAdapter extends BaseAdapter { List<lessonInfo> infos = new ArrayList<>(); Context mContext; public RequestAdapter(Context context, List<lessonInfo> info) { infos =info; mContext = context; } @Override public int getCount() { return infos.size(); } @Override public Object getItem(int position) { return infos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); if (convertView == null){ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_app_view,null); holder.mName = (TextView) convertView.findViewById(R.id.item_app_text); holder.mImageView = (ImageView) convertView.findViewById(R.id.item_app_icon); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.mName.setText(infos.get(position).getmName()); holder.mImageView.setVisibility(View.GONE); return convertView; } class ViewHolder { private TextView mName; private ImageView mImageView; }}
阅读全文
0 0
- ListView的学习
- ListView的再学习
- ListView的学习
- 【记录】ListView的学习
- ListView的学习笔记
- ListView属性的学习
- listview 的学习
- ListView的基础学习
- ListView的学习
- ListView学习1--ListView的使用
- Android学习:ListView的使用
- android中listview的学习
- Android ListView控件的学习
- ListView和Adapter的学习
- Android下ListView的学习
- android学习2--ListView的简单学习
- android学习之ListView布局的学习
- listview学习
- 为什么使用"use strict"可以节约你的时间
- Python网络爬虫——Re库
- struts项目默认进入后台action
- js初级循环结构
- Java socket
- ListView的学习
- C# 获取路径中,文件名、目录、扩展名等
- java中的static
- 结构体相关
- GPG简单使用介绍
- 沉浸式状态栏
- [Codeforces438E]The Child and Binary Tree(多项式开根+多项式求逆)
- HDU-4310
- 文章标题