gpt4 book ai didi

android - 从横向切换到纵向会产生 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 21:25:22 24 4
gpt4 key购买 nike

我正在制作一个在列表中显示事件的应用程序。每个事件都有一个自定义布局(使用 BaseAdapter)。如果我仅以纵向或横向使用我的手机,则没问题,但如果我在列表中并旋转我的手机以更改方向,则 BaseAdapter 会产生一个 NullPointerException。这是代码:

public class ShowListAdapter extends BaseAdapter {
private Activity a;
private List<Map<String, String>> monthList;
private static LayoutInflater inflater;

public ShowListAdapter(Activity act, List<Map<String, String>> msc) {
a = act;
monthList = msc;
inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
return monthList.size();
}

public Object getItem(int i) {
return i;
}

@Override
public long getItemId(int i) {
return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;

if (view == null) {
v = inflater.inflate(R.layout.list_item, null);
}

/* Some random code that formats the view goes here */

return v;
}
}

错误在 getCount() 处抛出,因为它(我假设)找不到列表变量 monthList

这个类在一个ListFragment类中使用

public class ListForMonth extends ListFragment {
List<Map<String, String>> eventListLoc;

public ListForMonth() {}

public ListForMonth(int i) {
eventListLoc = ShowHolder.eventList.get(i);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setListAdapter(new ShowListAdapter(this.getActivity(), eventListLoc));
return super.onCreateView(inflater, container, savedInstanceState);
}
}

ShowHolder 类有一个静态变量,它是在应用程序的初始屏幕中“生成”的。

主要的 Activity 有多个选项卡,每个选项卡都有自己的 ListFragment。代码中唯一重要的部分是这样的,我猜:

public Fragment getItem(int position) {
return new ListForMonth(position);
}

为什么代码会抛出这个错误?我该如何解决?提前致谢!

最佳答案

你是对的,问题出在这一行..

public Fragment getItem(int position) {
return new ListForMonth(position);
}

当方向发生变化时,Android 会使用默认构造函数调用 fragmnet..此时您的 List> eventListLoc 数据为 null..这就是它给出 NPE 的原因..

为了避免这种情况..像这样更改您的 fragment 代码..

public class ListForMonth extends ListFragment {
List<Map<String, String>> eventListLoc;
private int i;

public ListForMonth() {
}

public ListForMonth(int i) {
this.i = i;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
i = savedInstanceState.getInt("POSITION");
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
eventListLoc = ShowHolder.eventList.get(i);
setListAdapter(new ShowListAdapter(this.getActivity(), eventListLoc));
return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("POSITION", i);
}
}

关于android - 从横向切换到纵向会产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20285113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com