【发布时间】:2016-01-23 12:38:00
【问题描述】:
在 ListFragment 上遇到了这个问题,我认为是适配器的问题,但不知道为什么会这样:
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
可能包含错误的代码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getActivity().getIntent();
ArrayList<String> history = intent.getStringArrayListExtra("HistoryList");
ListView historyList = getListView();
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, history);
historyList.setAdapter(listAdapter);
}
启动历史一的片段:
public class PrimaryFragment extends Fragment {
@Nullable
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.primary_layout, null);
}
ArrayList<String> history = new ArrayList<String>();
//START//
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NumberFormat nf = new DecimalFormat("##.###");
SharedPreferences mDefaultPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
Set<String> set = mDefaultPreferences.getStringSet("key", null);
if(set != null){
history = new ArrayList<String>(set);
}
TextView money = (TextView) getActivity().findViewById(R.id.textCool);
String storedValue = mDefaultPreferences.getString("last known value", String.valueOf(0));
money.setText(storedValue);
}
+
public void history(View view){
Intent intent = new Intent(getActivity(), History.class);
intent.putStringArrayListExtra("HistoryList", history);
startActivity(intent);
}
logcat 最相关的部分:
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
10-23 21:01:32.268 12036-12036/com.androidbelieve.drawerwithswipetabs E/AndroidRuntime: at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:337)
10-23 21:01:32.268 12036-12036/com.androidbelieve.drawerwithswipetabs E/AndroidRuntime: at android.widget.ListView.setAdapter(ListView.java:491)
10-23 21:01:32.268 12036-12036/com.androidbelieve.drawerwithswipetabs E/AndroidRuntime: at com.androidbelieve.drawerwithswipetabs.History.onActivityCreated(History.java:26)
编辑:
我想我开始明白错误是什么了:
我正在用一个ArrayList 填充一个ListFragment,它在另一个Fragment(主要)中获得了它的值,但是这个code 第一次用于基于Activities 的应用程序,使用了@ 987654331@ 将这些值传递给另一个 Activity。
但是现在这些都是fragments 并且在同一个ViewPager 中,那么我没有Buttons 来启动History 片段,我只需要滑动。所以我的新问题是:
我如何将 ArrayString 值传递给 History ListFragment,因为我无法通过 Button 启动它,但我可以通过 Swipe 来启动它?
我已经尝试研究LifeCycle,但想不出任何东西,让我知道你会想出什么!
【问题讨论】:
-
如果没有完整的堆栈跟踪,我们将很难为您提供帮助。但是,您应该确认
history不是null,因为这可以解释您的症状。 -
您确定没有使用
setArguments传递List? -
做了一些编辑@CommonsWare
-
ArrayList<String> history为空 -
为什么是@Blackbelt?
标签: java android listview android-intent android-listfragment