Eclipse 和 IDEA 导入library库文件【图文步骤】
关于Eclipse 和 IDEA 导入library库文件,我们以PullToRefresh(上拉刷新下拉加载)组件的library为例来具体讲解。
PullToRefresh下载地址:https://github.com/chrisbanes/Android-PullToRefresh
我们的目的就是把library文件夹导入到Eclipse或者IDEA中去
一、IDEA 导入library库文件步骤
1、首先我们要有一个项目,没有的就创建一个吧
2、右击项目名称点击Open Module Settings(F4)
3、可以看到这样的界面
接下来在中间部分 点击绿色的加号 导入Module
找到要导入的library类库的目录
点击OK 后,,新的界面选择 第一个选项 Create module from existing sources,然后下一步知道import操作完成
4、然后就可以看到这样的界面,中间界面 多了一个library文件夹
5、接着点击最右边界面的绿色加号按钮 选择第三个Module Dependency,注意中间部分要选择你要导入library库文件的目录,即此时在中间界面选中demo文件夹,在按绿色按钮添加
6、可以看到有library文件夹可以选择 选择OK就行了 然后OK 结束设置
7、这是就可以看到你的项目里多了一个library文件夹
打开library文件夹可以看到文件夹内容都在,
8、我们在主Activity中添加一个library 提供的类检查是否导入成功,不报错可导入成功
二、Eclipse 导入library库文件步骤
1、导入
2、选择 Android/Existing Android Code Into Workspace
3、选择library文件夹目录 ,记得选中 Copy projects into workspace
4、可以看到项目目录多了library
5、右键library 选择properties (在最下面)
点击is Library --》ok
6、然后右击要导入library库文件的的项目 选择properties 添加Add 选择要导入的library文件夹
7、然后使用library库文件提供的类检测是否导入正确 (注意项目和library库文件需要在同一个目录下,即同一个工作空间)
还是先看效果图吧
我们再使用listview时,大多时候listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的item需要图片,有的不需要,但是这些又必须在同一个listview中显示,这时我们就需要在listview中显示多种样式的item,首先我们需要考虑的是如何将不同数量的数据装载到ArrayList<~>中呢,先看看下面的listViewItem,。
package com.example.keranbin.myapplication; import java.util.HashMap; import java.util.Map; public class lIstViewItem { //用于区分listview显示的不同item,告诉适配器我这是什么类型,listview适配器根据type决定怎么显示 public int type; //将要显示的数据用HashMap包装好 public HashMap map ; public lIstViewItem(int type, HashMap map) { this.type = type; this.map = map; } }
我们通过自定义一个listItem,即可将所有不同类型,不同数量的数据先组装成统一类型listItem即可,然后用arrayList.add(listitem)即可。
/** * 这里我们用三种不同的样式进行测试 **/ private ArrayList getDatas() { viewItemsArraylists = new ArrayList(); viewItemsArraylists.add(new lIstViewItem(2, getHashMapThreeType("汪星人", "汪星人喜欢吃骨头", "2015-10-18"))); viewItemsArraylists.add(new lIstViewItem(1, getHashMapSecondType("喵星人", "喵星喜欢吃鱼"))); viewItemsArraylists.add(new lIstViewItem(0, getHashMapFirstType("猴子"))); viewItemsArraylists.add(new lIstViewItem(0, getHashMapFirstType("老虎"))); viewItemsArraylists.add(new lIstViewItem(1, getHashMapSecondType("老母鸡", "老母鸡喜欢吃虫子"))); return viewItemsArraylists; } //第一种样式,只传输一个数据 private HashMap getHashMapFirstType(String firstTheme) { HashMap hashMap = new HashMap(); hashMap.put("Theme", firstTheme); return hashMap; } //第二种样式,传输两个数据 private HashMap getHashMapSecondType(String secondTheme, String secondContent) { HashMap hashMap = new HashMap(); hashMap.put("Theme", secondTheme); hashMap.put("Content", secondContent); return hashMap; } //第三种样式,传输三个数据 private HashMap getHashMapThreeType(String threeTheme, String threeContent, String date) { HashMap hashMap = new HashMap(); hashMap.put("Theme", threeTheme); hashMap.put("Content", threeContent); hashMap.put("Date", date); return hashMap; }
剩下的就是listViewAdapter的事情啦,和显示一种样式的listViewAdapter不同的一点是我们重写实现父类baseAdapter的两个方法。
//返回当前布局的样式type @Override public int getItemViewType(int position) { return listDatas.get(position).type; } //返回你有多少个不同的布局 @Override public int getViewTypeCount() { return 3; }
然后在getView中根据需要进行判断决定显示那种样式即可
package com.example.keranbin.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; /** * Created by keranbin on 2015/10/13. */ public class ListViewAdapter extends BaseAdapter { private LayoutInflater mLayoutInflater; private Context context; private ArrayList listDatas; public ListViewAdapter(Context context, ArrayList listDatas) { this.listDatas = listDatas; mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } //返回当前布局的样式type @Override public int getItemViewType(int position) { return listDatas.get(position).type; } //返回你有多少个不同的布局 @Override public int getViewTypeCount() { return 3; } @Override public int getCount() { return listDatas.size(); } @Override public Object getItem(int position) { return listDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { lIstViewItem listItem = listDatas.get(position); int Type = getItemViewType(position); ViewHolderfirstType viewHolderfirstType = null; ViewHoldersecondType viewHoldersecondType = null; ViewHolderThreeType viewHolderThreeType = null; if (convertView == null) { switch (Type) { case 0: viewHolderfirstType = new ViewHolderfirstType(); convertView = mLayoutInflater.inflate(R.layout.activity_first_type_item, null); viewHolderfirstType.tv_first_theme= (TextView) convertView.findViewById(R.id.tv_first_theme); viewHolderfirstType.tv_first_theme.setText(listItem.map.get("Theme").toString()); convertView.setTag(viewHolderfirstType); break; case 1: viewHoldersecondType = new ViewHoldersecondType(); convertView = mLayoutInflater.inflate(R.layout.activity_second_type_item, null); viewHoldersecondType.tv_second_content = (TextView) convertView.findViewById(R.id.tv_second_content); viewHoldersecondType.btn_second_theme = (Button) convertView.findViewById(R.id.btn_second_theme); viewHoldersecondType.tv_second_content.setText(listItem.map.get("Theme").toString()); viewHoldersecondType.btn_second_theme.setText(listItem.map.get("Content").toString()); convertView.setTag(viewHoldersecondType); break; case 2: viewHolderThreeType = new ViewHolderThreeType(); convertView = mLayoutInflater.inflate(R.layout.activity_three_type_item, null); viewHolderThreeType.tv_three_content = (TextView) convertView.findViewById(R.id.tv_three_content); viewHolderThreeType.et_three_theme= (EditText) convertView.findViewById(R.id.et_three_theme); viewHolderThreeType.tv_three_time= (TextView) convertView.findViewById(R.id.tv_three_time); viewHolderThreeType.et_three_theme.setText(listItem.map.get("Theme").toString()); viewHolderThreeType.tv_three_content.setText(listItem.map.get("Content").toString()); viewHolderThreeType.tv_three_time.setText(listItem.map.get("Date").toString()); convertView.setTag(viewHolderThreeType); break; } }else{ switch (Type){ case 0: viewHolderfirstType= (ViewHolderfirstType) convertView.getTag(); viewHolderfirstType.tv_first_theme.setText(listItem.map.get("Theme").toString()); break; case 1: viewHoldersecondType= (ViewHoldersecondType) convertView.getTag(); viewHoldersecondType.tv_second_content = (TextView) convertView.findViewById(R.id.tv_second_content); viewHoldersecondType.btn_second_theme = (Button) convertView.findViewById(R.id.btn_second_theme); viewHoldersecondType.tv_second_content.setText(listItem.map.get("Theme").toString()); viewHoldersecondType.btn_second_theme.setText(listItem.map.get("Content").toString()); break; case 2: viewHolderThreeType= (ViewHolderThreeType) convertView.getTag(); viewHolderThreeType.tv_three_content = (TextView) convertView.findViewById(R.id.tv_three_content); viewHolderThreeType.et_three_theme= (EditText) convertView.findViewById(R.id.et_three_theme); viewHolderThreeType.tv_three_time= (TextView) convertView.findViewById(R.id.tv_three_time); viewHolderThreeType.et_three_theme.setText(listItem.map.get("Theme").toString()); viewHolderThreeType.tv_three_content.setText(listItem.map.get("Content").toString()); viewHolderThreeType.tv_three_time.setText(listItem.map.get("Date").toString()); break; } } return convertView; } class ViewHolderfirstType { TextView tv_first_theme; } class ViewHoldersecondType { TextView tv_second_content; Button btn_second_theme; } class ViewHolderThreeType { EditText et_three_theme; TextView tv_three_content; TextView tv_three_time; } }
第一种样式页面组件主要是一个TextView.
第二种样式页面组件主要是一个TextView和一个button.
第三种样式页面组件主要是两个TextView和一个EditText.
activity_main.xml文件非常简单,就一个listView。
下面是MainActivity的代码
package com.example.keranbin.myapplication; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import java.util.ArrayList; import java.util.HashMap; public class MainActivity extends Activity { private ListView listView; //页面listview private ListViewAdapter listViewAdapter; //listview适配器 private ArrayList viewItemsArraylists; //Arraylist主要装载的是传给适配器的数据集合 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化页面组件及一些数据 initView(); //为listview设置适配器 ListViewAdapter listViewAdapter = new ListViewAdapter(MainActivity.this, getDatas()); listView.setAdapter(listViewAdapter); } //初始化页面组件及一些数据 private void initView() { listView = (ListView) this.findViewById(R.id.listView); listViewAdapter = new ListViewAdapter(MainActivity.this, getDatas()); } /** * 这里我们用三种不同的样式进行测试 **/ private ArrayList getDatas() { viewItemsArraylists = new ArrayList(); viewItemsArraylists.add(new lIstViewItem(2, getHashMapThreeType("汪星人", "汪星人喜欢吃骨头", "2015-10-18"))); viewItemsArraylists.add(new lIstViewItem(1, getHashMapSecondType("喵星人", "喵星喜欢吃鱼"))); viewItemsArraylists.add(new lIstViewItem(0, getHashMapFirstType("猴子"))); viewItemsArraylists.add(new lIstViewItem(0, getHashMapFirstType("老虎"))); viewItemsArraylists.add(new lIstViewItem(1, getHashMapSecondType("老母鸡", "老母鸡喜欢吃虫子"))); return viewItemsArraylists; } //第一种样式,只传输一个数据 private HashMap getHashMapFirstType(String firstTheme) { HashMap hashMap = new HashMap(); hashMap.put("Theme", firstTheme); return hashMap; } //第二种样式,传输两个数据 private HashMap getHashMapSecondType(String secondTheme, String secondContent) { HashMap hashMap = new HashMap(); hashMap.put("Theme", secondTheme); hashMap.put("Content", secondContent); return hashMap; } //第三种样式,传输三个数据 private HashMap getHashMapThreeType(String threeTheme, String threeContent, String date) { HashMap hashMap = new HashMap(); hashMap.put("Theme", threeTheme); hashMap.put("Content", threeContent); hashMap.put("Date", date); return hashMap; } }
Android ListView存在多个item样式的处理方法
在项目开发的时候,相信大家可能会遇到一个ListView中出现多个不同的布局,遇到这个问题我的大致思路就是创建多个viewholder,在getViewType的时候设置不同位置的item用不同的viewholder,好了不废话那么多直接上代码:
package com.sunny.youdao; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private Context mContext; private LinearLayout linearLayout = null; private LayoutInflater inflater; private List list = new ArrayList(); private TextView tex; private final int VIEW_TYPE = 3; private final int TYPE_1 = 0; private final int TYPE_2 = 1; private final int TYPE_3 = 2; public MyAdapter(Context context, List list) { // TODO Auto-generated constructor stub this.mContext = context; this.list = list; inflater = LayoutInflater.from(mContext); } @Override public int getCount() { // TODO 自动生成的方法存根 return list.size(); } @Override public Object getItem(int position) { // TODO 自动生成的方法存根 return list.get(position); } @Override public long getItemId(int position) { // TODO 自动生成的方法存根 return position; } //每个convert view都会调用此方法,获得当前所需要的view样式 @Override public int getItemViewType(int position) { // TODO Auto-generated method stub int viewtype = position%6; if(viewtype == 0) return TYPE_1; else if(viewtype < 3) return TYPE_2; else if(viewtype < 6) return TYPE_3; else return TYPE_1; } //返回样式的数量 @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 3; } @Override public View getView(int position, View convertView, ViewGroup parent) { viewHolder1 holder1 = null; viewHolder2 holder2 = null; viewHolder3 holder3 = null; int type = getItemViewType(position); // 无convertView,需要new出各个控件 if (convertView == null) { Log.e("convertView = ", "###convertView为空###"); // 按当前所需的样式,确定new的布局 switch (type) { case TYPE_1: convertView = inflater.inflate(R.layout.listitem1, parent,false); holder1 = new viewHolder1(); holder1.textView = (TextView) convertView.findViewById(R.id.textview1); holder1.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox); Log.e("convertView = ", "布局样式一"); convertView.setTag(holder1); break; case TYPE_2: convertView = inflater.inflate(R.layout.listitem2, parent,false); holder2 = new viewHolder2(); holder2.textView = (TextView) convertView.findViewById(R.id.textview2); Log.e("convertView = ", "布局样式二"); convertView.setTag(holder2); break; case TYPE_3: convertView = inflater.inflate(R.layout.listitem3, parent,false); holder3 = new viewHolder3(); holder3.textView = (TextView) convertView.findViewById(R.id.textview3); holder3.imageView = (ImageView) convertView.findViewById(R.id.imageview); Log.e("convertView = ", "布局样式三"); convertView.setTag(holder3); break; } } else { // 有convertView,按样式,取得不用的布局 switch (type) { case TYPE_1: holder1 = (viewHolder1) convertView.getTag(); Log.e("convertView= ", "布局样式一"); break; case TYPE_2: holder2 = (viewHolder2) convertView.getTag(); Log.e("convertView= ", "布局样式二"); break; case TYPE_3: holder3 = (viewHolder3) convertView.getTag(); Log.e("convertView= ", "布局样式三"); break; } } // 设置资源 switch (type) { case TYPE_1: holder1.textView.setText(Integer.toString(position)); holder1.checkBox.setChecked(true); break; case TYPE_2: holder2.textView.setText(Integer.toString(position)); break; case TYPE_3: holder3.textView.setText(Integer.toString(position)); holder3.imageView.setBackgroundResource(R.drawable.icon); break; } return convertView; } // 各个布局的控件资源 class viewHolder1 { CheckBox checkBox; TextView textView; } class viewHolder2 { TextView textView; } class viewHolder3 { ImageView imageView; TextView textView; } }
相关文章
- 这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
c#检测usb设备拨插类库USBClassLibrary分享
这篇文章主要介绍了c#检测usb设备拨插类库USBClassLibrary的简单示例,需要的朋友可以参考下...2020-06-25- 一、下载Eclipse的PHP插件 百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了。二、安装Eclipse的PHP插件 插件下载完成之后,解压,然后把site.xml...2015-11-24
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
这篇文章主要介绍了在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11tomcat9 下载安装和配置+整合到eclipse的教程详解
这篇文章主要介绍了tomcat9 下载安装和配置+整合到eclipse,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-28- 这篇文章主要给大家总结介绍了R语言导入导出数据的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06
Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)
这篇文章主要介绍了Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-20Windows系统下Eclipse搭建ESP32编译环境及安装过程
Ecppse 使用了 ESP-IDF 中的 Makefile 支持。这意味着您需要从创建 ESP-IDF 项目开始。您可以使用 github 中的 idf-template 项目,接下来通过本文给大家介绍Windows系统下Eclipse搭建ESP32编译环境及安装过程,感兴趣的朋友一起看看吧...2021-10-18- 这篇文章主要为大家分享了node.js插件nodeclipse安装图文教程,如何安装node.js支持插件,下面小编为大家分享具体步骤...2016-05-09
- 使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,下面通过脚本之家平台给大家分享几种解决办法,需要的朋友参考下...2016-02-05
VC++ loadlibrary()加载三方dll失败, 返回错误码:126的解决方法
今天在编写VC++ loadlibrary()加载三方dll是总是失败,并且返回错误码:126,这里就为大家分享一下具体的解决方法...2021-03-15eclipse汉化及jdk安装环境配置超详细教程(Java安装教程)
这篇文章主要介绍了eclipse汉化及jdk安装环境配置超详细教程(Java安装教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-11- 这篇文章主要介绍了Spring JPA配置文件Eclipse报错如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-21
PHP启动提示Unable to load dynamic library php_curl.dll怎么办
PHP启动提示Unable to load dynamic library php_curl.dll怎么办 ,下面我们来看解决办法哦 这个问题容易手配PHP的时候出现, 在php.ini中正确开启了curl扩展后,...2016-11-25phpexcel导入xlsx文件报错xlsx is not recognised as an OLE file 怎么办
phpexcel是一款php读写excel的插件了,小编有一个这样的功能要来实现,但是在导入xlsx时发现xlsx is not recognised as an OLE file 了,但是导入xls是没有问题了,碰到这种...2016-11-25- 今天小编就为大家分享一篇关于C#数据导入到EXCEL的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
- 让C# Excel导入导出,支持不同版本的Office,感兴趣的小伙伴们可以参考一下...2020-06-25
Eclipse 和 IDEA 导入library库文件【图文步骤】
关于关于Eclipse 和 IDEA 导入library库文件,本教程使用图文并茂来详情讲解,非常实用,做Android开发的同学可以参考一下。 关于Eclipse 和 IDEA 导入library库文件,...2016-09-20- 这篇文章主要介绍了Go 自定义package包设置与导入操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 这篇文章主要为大家详细介绍了eclipse实现ECDSA数字签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-24