baseadapter怎么用 android.view.inflatbaseruntimeexceptionn:binary xml file line 11:e

1291人阅读
Android(10)
Android 常见问题
&在Android开发中新手通常会遇到各种各样调试不通过或者程序崩溃的问题,有些与环境配置有关、有些与代码编写有关。不管怎么说,有问题就要记录下来以便下次遇到同样的问题能够快速解决,同时也是对自己开发能力的一种提升。下面,本文将记录个人在开发中遇到的各类常见问题(不断更新......)
1. java.lang.NoClassDefFoundError
& & 这个问题出现在一次视频开发中。本人将先前开发过的一套完整Android代码复制到一个新的工程目录,将其中有关摄像机认证连接的代码做了整体替换之后重新编译并通过。但是在启动程序后从一个界面调转到另一个界面的时候出现崩溃,JVM抛出runtime异常,日志显示找不到加载类。
& & 解决办法:原来该class中需要加载另外的JAR包,然而在工程拷贝的过程中误将lib目录下的jar文件删除导致classloader加载出错。通过导入jar包后重新编译程序一切正常。
2. 去除Android程序自带的状态栏
& & 新建一个Android程序时,通常程序会带有一个状态栏。如果想要去除状态栏的话只需要在AndroidMainFest中设置相关的Application属性即可:
&application
android:allowBackup=&true&
android:icon=&@drawable/icon&
android:label=&@string/app_name&
android:theme=&@android:style/Theme.NoTitleBar& &
android:name=&iton.lifecute.activity.SplashScreen&
android:configChanges=&orientation|keyboardHidden&
android:label=&@string/app_name&
android:screenOrientation=&landscape&
android:windowSoftInputMode=&stateHidden& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&/application&
android:theme=&@android:style/Theme.NoTitleBar& 表示程序的主题为无状态栏并且是对整个应用程序而言,如果只想为某个Activity设置为无状态栏只需要将改属性添加到对应的Activity声明中。需要说明的是Android系统自带的状态栏还是会显示的,如果需要的话可以将程序设置为全屏,只需要在改属性后加上
android:theme=&@android:style/Theme.NoTitleBar.Fullscreen&即可。
3. eclipse导入Android工程出现中文乱码
& & 有时候我们在用eclipse导入一个现有的Android工程时会出现中文字符乱码的现象,这个是因为你选择的workspace的编码方式与你已经存在的工程的编码方式不同,中文就会出现乱码从而可能引发程序报错。我们需要在eclipse中设置相应的编码方式即可。
3. Adapter开发中没有回调getView()的问题
&适配器(Adapter)是安卓开发中经常用到的一类工具,它为我们的后端数据与前端显示提供了良好的接口,常见的适配器view有:ListView、GridView等。今天在开发自定义Adapter的时候遇到了设置setAdapter()之后没有回调自定义的getView()方法来显示想要的界面。贴出代码如下:
class ListDeviceAdapter extends BaseAdapter
ChildListView childlist =
private Context mC
private List&Map&String, Object&& mDeviceD // 设备信息集合
public ListDeviceAdapter(Context context, List&Map&String, Object&& listItems)
this.mContext =
this.mDeviceData = listI
System.out.println(&-- ListDeviceAdapter is running...--&);
public int getCount()
return 0;//return mDeviceData.size();//首先回调getCount()方法,根据其值来决定是否回调getView()
public Object getItem(int position)
return mDeviceData.get(position);
public long getItemId(int position)
public View getView(int position, View convertView, ViewGroup parent)
System.out.println(&-- getView is running...--&);
if (convertView == null)
System.out.println(&-- list is running...--&);
childlist = new ChildListView();
convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_control, null);
childlist.mDeviceType = (ImageButton) convertView.findViewById(R.id.list_btn_device_type);
childlist.mDeviceName = (TextView) convertView.findViewById(R.id.list_text_device_name);
childlist.mDeviceControl = (ImageButton) convertView.findViewById(R.id.list_btn_device_type);
convertView.setTag(childlist);
childlist = (ChildListView) convertView.getTag();
childlist.mDeviceType.setBackgroundResource(R.drawable.device_light);
childlist.mDeviceName.setText(mDeviceData.get(0).get(&title&).toString());
childlist.mDeviceControl.setBackgroundResource(R.drawable.device_curtain);
childlist.mDeviceType.setOnClickListener(new OnClickListener()
public void onClick(View v)
childlist.mDeviceControl.setOnClickListener(new OnClickListener()
public void onClick(View v)
return convertV
class ChildListView
ImageButton mDeviceT
TextView mDeviceN
ImageButton mDeviceC
经过反复检查发现自定义Adapter先是回调的getCount()方法,起初返回的是空,Adapter判断其返回值来决定是否回调getView方法。问题就在这里,简单修改其返回值,即返回传人的List数据大小,问题得到解决。
4. android.view.InflateException: ........Caused by: java.lang.StackOverflowError
11-09 15:46:04.410: E/AndroidRuntime(16591): FATAL EXCEPTION: main
11-09 15:46:04.410: E/AndroidRuntime(16591): java.lang.RuntimeException: Unable to start activity ComponentInfo{iton.lifecube/iton.lifecube.activity.MainActivity}: android.view.InflateException: Binary XML file line #38: Error inflating class &unknown&
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.os.Looper.loop(Looper.java:137)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread.main(ActivityThread.java:4745)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at java.lang.reflect.Method.invokeNative(Native Method)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at java.lang.reflect.Method.invoke(Method.java:511)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at dalvik.system.NativeStart.main(Native Method)
11-09 15:46:04.410: E/AndroidRuntime(16591): Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class &unknown&
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.Activity.setContentView(Activity.java:1867)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at iton.lifecube.activity.MainActivity.onCreate(MainActivity.java:78)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.Activity.performCreate(Activity.java:5008)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-09 15:46:04.410: E/AndroidRuntime(16591):
... 11 more
11-09 15:46:04.410: E/AndroidRuntime(16591): Caused by: java.lang.reflect.InvocationTargetException
11-09 15:46:04.410: E/AndroidRuntime(16591):
at java.lang.reflect.Constructor.constructNative(Native Method)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
11-09 15:46:04.410: E/AndroidRuntime(16591):
... 26 more
11-09 15:46:04.410: E/AndroidRuntime(16591): Caused by: java.lang.StackOverflowError
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.graphics.Bitmap.getScaledWidth(Bitmap.java:833)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.graphics.puteBitmapSize(BitmapDrawable.java:179)
11-09 15:46:04.410: E/AndroidRuntime(16591):
at android.graphics.drawable.BitmapDrawable.setBitmap(BitmapDrawable.java:187)
今天遇到一个很奇葩的问题,同样的一套代码在4.1和4.2的手机上都没问题,在4.1的平板上却报出了以上错误,百度了n多资料有各种原因并做了各种尝试,但就是没解决问题。伤心之余决定向google求助,果然众里寻他千百度、答案却在google中。原来是由于xml加载图片的时候在自定义Drawable的xml文件中和添加的图片资源中有重名的,导致了以上错误。修改即可,下次在自定义Drawable资源文件时一定要记得规范命名哦,最好加上后缀:_selecter。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30073次
排名:千里之外
原创:12篇
评论:48条
(1)(2)(1)(2)(2)(1)(4)(2)(1)查看: 1240|回复: 15
重写BaseAdapter,使用notifyDataSetChanged出问题了,在线等大神
该用户从未签到主题帖子e币
下面是我写的Adapter:
public class PostListAdapter extends BaseAdapter {
& & private Activity mActivity =
& & private List&Map&String, Object&& mListI
& & public PostListAdapter(Activity activity, List&Map&String, Object&& listItems){
& && &&&mActivity =
& && &&&mListItem = listI
& & @Override
& & public int getCount() {
& && &&&return mListItem.size();
& & @Override
& & public Object getItem(int position) {
& && &&&return mListItem.get(position);
& & @Override
& & public long getItemId(int position) {
& & @Override
& & public View getView(int position, View convertView, ViewGroup parent) {
& && &&&// If the convertView is null, then we create a view with xml.
& && &&&View view = convertV
& && &&&if(convertView == null){
& && && && &view = mActivity.getLayoutInflater().inflate(R.layout.post_info, null);
& && &&&// Get elements from the view.
& && &&&TextView postInfoTitle&&= (TextView) view.findViewById(R.id.post_info_title);
& && &&&TextView postInfoTag& & = (TextView) view.findViewById(R.id.post_info_tag);
& && &&&TextView postInfoLast& &= (TextView) view.findViewById(R.id.post_info_last);
& && &&&TextView postInfoContent= (TextView) view.findViewById(R.id.post_info_content);
& && &&&TextView postInfoNum& & = (TextView) view.findViewById(R.id.post_info_num);
& && &&&ImageView iconView&&= (ImageView) view.findViewById(R.id.post_info_icon);
& && &&&// Set elements with given data.
& && &&&Map&String, Object& item = mListItem.get(position);
& && &&&postInfoTitle&&.setText(item.get(MainActivity.KEY_TITLE).toString());
& && &&&postInfoTag& & .setText(item.get(MainActivity.KEY_TAG).toString());
& && &&&postInfoLast& &.setText(item.get(MainActivity.KEY_LAST).toString());
& && &&&postInfoNum& & .setText(item.get(MainActivity.KEY_CNUM).toString());
& && &&&postInfoContent.setText(item.get(MainActivity.KEY_CONTENT).toString());
& && &&&if ((icon =(Bitmap) item.get(MainActivity.KEY_ICON)) != null){
& && && && &Drawable d = new BitmapDrawable(mActivity.getResources(), icon);
& && && && &d.setBounds(0,0,30,30);
& && && && &iconView.setImageDrawable(d);
我要实现的功能是从网上下载图片并显示到listview中,因为有些是没有图片的,所以listview里面我先全部都弄成默认图片。然后从网上下载,然后更改数据,再调用notifyDatasetChanged。
红字代码时这样的,对于为空的图片,我们就不做任何事情,如果下载到图片,就更换图片。
问题当然不是挖掘机技术哪家强。。。。
问题是,当我设定一个数据更改,例如说给第二项加上图片,调用notifydatasetChanged过后,发觉,界面上除了第二项,还有其他项的图片也被换掉了。。。。。。求解,为什么,怎么破
你初始化下一条view的时候 是沿用的上一个convertview 如果你上一个设置了一个图片A 那么下一个你不改变图片的话 它还是图片A
该用户从未签到主题帖子e币
我的默认图片是在XML文件里面写死的,只要不修改,始终会持续下去,问题是,我现在懂了一点数据过后,发 ...
你初始化下一条view的时候 是沿用的上一个convertview 如果你上一个设置了一个图片A 那么下一个你不改变图片的话 它还是图片A
你是对的,大神我爱你。我之前对convertView的理解有问题。。。谢谢&
有点儿迷糊,能说说怎么改么?整了好久,头都昏了。。。谢谢大神&
该用户从未签到主题帖子e币
本帖最后由 yxxone 于
16:49 编辑
对了,我发觉一个现象,就是我一直上下滑动的话,被更改的view的数量会越来越多,最后的结果是,被修改的view和没被修改的view相互间隔。。。我只修改了20组数据的一个,但是最后修改的view有10个。。。。。。
签到天数: 478 天连续签到: 60 天[LV.9]以坛为家II主题帖子e币
开源项目很多都可是实现listview里的图片加载 方便解决了很多问题
比如Universal_Image_Loader
签到天数: 48 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
先把 getView 优化吧
官方推荐使用 ViewHolder
還有妳也沒 setTag
这样效能很差
我看过哪些,这个不是问题的中重点啊&
该用户从未签到主题帖子e币
先把 getView 优化吧
官方推荐使用 ViewHolder
還有妳也沒 setTag
我看过哪些,这个不是问题的中重点啊
签到天数: 4 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
可能是你的list写的有问题,把调用的adapter的代码发一下吧
不好意思,刚刚吃饭去了。
生成数据的代码
第一次设置代码:
修改数据后调用:&
签到天数: 139 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
可能是你在对mListItem进行添加数据时没有对每个item进行重新new,导致对象被复用了,你修改了一个,其他item也改了,你可以打印下list的数据看下是不是这问题。
我不是很理解大神你在说什么,可以说清楚点吗?
我的数据保存在List里面的。我是这么修改数据的:
其中icon就是新数据,需要更新上去的。&
该用户从未签到主题帖子e币
红色的if后面加个else 在else里设置成默认图片 这样试试
突然意识到你也是对的,只是你没有解释到让我当时就能懂,谢谢,也是大神啊&
我的默认图片是在XML文件里面写死的,只要不修改,始终会持续下去,问题是,我现在懂了一点数据过后,发觉修改的比我想象的多。就是这样&
签到天数: 2 天连续签到: 2 天[LV.1]初来乍到主题帖子e币
楼上是正解
该用户从未签到主题帖子e币
可能是你的list写的有问题,把调用的adapter的代码发一下吧
不好意思,刚刚吃饭去了。
生成数据的代码
public List&Map&String, Object&& getPostInfo() throws JSONException{
& && &&&if(mFileArray == null){
& && && && &
& && &&&}
& && &&&List&Map&String, Object&& listItem = Collections.synchronizedList(new ArrayList&Map&String, Object&&());
& && &&&JSONA
& && &&&Map&String, Object& item =
& && &&&JSONObject author =
& && &&&for(int i=0;i&mFileArray.length();i++){
& && && && &item = new HashMap&String, Object&();
& && && && &mJson = mFileArray.getJSONObject(i);
& && && && &comments = mJson.getJSONArray(JSON_COMMENTS);
& && && && &author = comments.getJSONObject(0).getJSONObject(JSON_AUTHOR);
& && && && &item.put(MainActivity.KEY_TAG,mJson.getString(JSON_TAG)+&&&&);
& && && && &item.put(MainActivity.KEY_LAST, author.getString(JSON_NAME));
& && && && &item.put(MainActivity.KEY_TITLE, getTitle());
& && && && &item.put(MainActivity.KEY_CONTENT, getContent());
& && && && &item.put(MainActivity.KEY_CNUM, Integer.valueOf(comments.length()));
& && && && &item.put(MainActivity.KEY_ICON_URL,author.getString(JSON_ICON));
& && && && &item.put(MainActivity.KEY_ICON, null);
& && && && &listItem.add(item);
& && &&&}
& && &&&return listI
& & }复制代码
第一次设置代码:
mAdapter = new PostListAdapter(getActivity(),mListItems);
& && &&&setListAdapter(mAdapter);复制代码
修改数据后调用:
Bitmap icon = (Bitmap) message.getData().getParcelable(MainActivity.KEY_ICON);& && && && && && && && &mListItems.get(message.arg1).put(MainActivity.KEY_ICON, icon);& && && && &&&mAdapter.notifyDataSetChanged();复制代码
该用户从未签到主题帖子e币
红色的if后面加个else 在else里设置成默认图片 这样试试
我的默认图片是在XML文件里面写死的,只要不修改,始终会持续下去,问题是,我现在懂了一点数据过后,发觉修改的比我想象的多。就是这样
你初始化下一条view的时候 是沿用的上一个convertview 如果你上一个设置了一个图片A 那么下一个你不改变图片的话 它还是图片A&
该用户从未签到主题帖子e币
可能是你在对mListItem进行添加数据时没有对每个item进行重新new,导致对象被复用了,你修改了一个,其他it ...
我不是很理解大神你在说什么,可以说清楚点吗?
我的数据保存在List&map&string, object&&里面的。我是这么修改数据的:mListItems.get(message.arg1).put(MainActivity.KEY_ICON, icon);
mAdapter.notifyDataSetChanged();复制代码
其中icon就是新数据,需要更新上去的。
该用户从未签到主题帖子e币
你初始化下一条view的时候 是沿用的上一个convertview 如果你上一个设置了一个图片A 那么下一个你不改变 ...
有点儿迷糊,能说说怎么改么?整了好久,头都昏了。。。谢谢大神
该用户从未签到主题帖子e币
你初始化下一条view的时候 是沿用的上一个convertview 如果你上一个设置了一个图片A 那么下一个你不改变 ...
你是对的,大神我爱你。我之前对convertView的理解有问题。。。谢谢
推荐阅读热门话题
61886420384328282281261252226218210208204201715
21&分钟前3&小时前6&小时前6&小时前6&小时前昨天&23:52昨天&16:26昨天&15:16昨天&13:18昨天&11:07昨天&10:23昨天&10:22昨天&09:46昨天&09:43昨天&09:39昨天&09:34
Powered byandroid基础(5)
今天在做用gridview显示手机中图片时,抛出了这样一个错误,第一次遇到,记录一下。
和原来一样,为gridview设置的适配器继承的是BaseAdapter,然后重写四个方法,问题出在getView(int position, View convertView, ViewGroup parent)这个方法。
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(SelectPicActivity.this, R.layout.image_grid, parent);
View view = View.inflate(SelectPicActivity.this, R.layout.image_grid, parent);在inflate()这个方法中将第三个参数改为null就不会报上面的错误了。
那么什么时候用parent,什么时候是null?
& & & 据我所知,适配器继承ArrayAdapter和BaseAdapter,SimpleAdapter该参数应传入null,否则就会报上面的异常。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6173次
排名:千里之外
原创:18篇
(2)(1)(1)(3)(2)(2)(3)(2)(1)(2)(2)(1)

我要回帖

更多关于 baseruntimeexception 的文章

 

随机推荐