Android 屏幕解锁时发生碰撞
我的应用程序运行得很好,除了当用户停止使用手机足够长的时间以锁定屏幕时,当他们解锁手机时,应用程序崩溃,我对原因有点不知所措。以下是错误: 下面是惰性适配器:Android 屏幕解锁时发生碰撞,android,listview,android-lifecycle,baseadapter,Android,Listview,Android Lifecycle,Baseadapter,我的应用程序运行得很好,除了当用户停止使用手机足够长的时间以锁定屏幕时,当他们解锁手机时,应用程序崩溃,我对原因有点不知所措。以下是错误: 下面是惰性适配器: package com.buhz.helpers; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.co
package com.buhz.helpers;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.buhz.login.R;
import com.buhz.login.TabHostFragmentActivity;
import com.loopj.android.image.SmartImageView;
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
TextView name = (TextView)vi.findViewById(R.id.name); // title
TextView message = (TextView)vi.findViewById(R.id.message); // artist name
TextView created = (TextView)vi.findViewById(R.id.created); // duration
SmartImageView thumb_image = (SmartImageView) vi.findViewById(R.id.list_image);
HashMap<String, String> update = new HashMap<String, String>();
update = data.get(position);
// Setting all values in listview
name.setText(update.get("name"));
message.setText(update.get("message"));
created.setText(update.get("created"));
thumb_image.setImageUrl(update.get("thumb_img"));
name.setOnClickListener(new myOnClickListener(position));
thumb_image.setOnClickListener(new myOnClickListener(position));
return vi;
}
public class myOnClickListener implements OnClickListener{
private int position;
private String clicked_uid;
public myOnClickListener(int position){
this.position=position;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
HashMap<String, String> update = new HashMap<String, String>();
update = data.get(position);
Log.i("Update Position:", update.toString());
clicked_uid=update.get("uid");
Log.d("Clicked UID:", clicked_uid+"");
Intent i = new Intent(activity.getApplicationContext() , TabHostFragmentActivity.class);
i.putExtra("profile_uid", clicked_uid);
activity.startActivity(i);
activity.finish();
}
}
}
package com.buhz.helpers;
导入java.util.ArrayList;
导入java.util.HashMap;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.buhz.login.R;
导入com.buhz.login.TabHostFragmentActivity;
导入com.loopj.android.image.SmartImageView;
公共类LazyAdapter扩展了BaseAdapter{
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共图像加载器;
公共LazyAdapter(活动a,ArrayList d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.list_行,空);
TextView name=(TextView)vi.findviewbyd(R.id.name);//title
TextView消息=(TextView)vi.findviewbyd(R.id.message);//艺术家姓名
TextView created=(TextView)vi.findViewById(R.id.created);//持续时间
SmartImageView thumb_image=(SmartImageView)vi.findViewById(R.id.list_image);
HashMap update=新的HashMap();
更新=数据。获取(位置);
//在listview中设置所有值
name.setText(update.get(“name”));
message.setText(update.get(“message”));
created.setText(update.get(“created”);
thumb_image.setImageUrl(update.get(“thumb_img”);
name.setOnClickListener(新的myOnClickListener(位置));
thumb_image.setOnClickListener(新的myOnClickListener(位置));
返回vi;
}
公共类myOnClickListener实现OnClickListener{
私人职位;
私有字符串;uid;
公共myOnClickListener(内部职位){
这个位置=位置;
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
HashMap update=新的HashMap();
更新=数据。获取(位置);
Log.i(“更新位置:”,Update.toString());
单击_uid=update.get(“uid”);
Log.d(“单击UID:,单击UID+”);
Intent i=新的Intent(activity.getApplicationContext(),TabHostFragmentActivity.class);
i、 putExtra(“profile\u-uid”,单击了\u-uid);
活动性、触觉性(i);
activity.finish();
}
}
}
您必须通过确保正在处理所有可能的状态来检查应用程序状态。当应用程序状态变为未处理状态(如onResume或onStart)时,就会发生此问题
本文将帮助您了解每个状态以及何时调用它
正如上面所说:
因此,我将AndroidManifest.xml更改为包含所有配置
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize|layoutDirection"
它对我很有用。从您粘贴的日志猫中,看起来异常是在运行“创建活动”之前抛出的。因此,您的LazyAdapter正在获取活动的空值。确保您的生命周期事件按顺序触发,并且在正确创建活动之前,您没有尝试实例化适配器。当您说“确保您的生命周期事件按顺序触发”时是什么意思…现在我使用的是FragmentActivity和fragment,到目前为止,我唯一使用的生命周期方法是onCreate。如果我还没有实现生命周期方法,那么生命周期方法不是为我处理的吗?我没有说清楚-基本上你必须确保你在生命周期中的正确时间实例化LazyAdapter。这对片段没有多大帮助,这就是问题所在。我发现由于某种原因,它的bc片段的加载速度比恢复时的activitys快,所以我的activitys上下文还没有准备好,我只是不知道该怎么办
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize|layoutDirection"