getListAdapter()从ListFragment返回null,getListView工作
问题描述:
按标题,我被堵在这个荒谬的问题getListAdapter()从ListFragment返回null,getListView工作
我有一个ListFragment,这里的精简代码:
public class AlarmsListFragment extends ListFragment implements AbsListView.OnItemClickListener {
public ListAdapter mAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mAdapter = new AlarmsAdapter(getActivity(), R.layout.alarm_card_item, alarmsList);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_alarms_list, container, false);
mListView = (AbsListView) view.findViewById(android.R.id.list);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
return view;
}
}
而且然后有一个活动:
public class MainActivity extends Activity implements AlarmsListFragment.OnAlarmSelectedListener {
ListFragment mAlarmsListFragment;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getFragmentManager();
mAlarmsListFragment = (ListFragment) fm.findFragmentByTag(ALARM_LIST_TAG);
if (mAlarmsListFragment == null)
{
mAlarmsListFragment = new AlarmsListFragment();
getFragmentManager().beginTransaction()
.add(R.id.listContainer, mAlarmsListFragment, ALARM_LIST_TAG)
.commit();
}
}
后来,onOptionsItemSelected,我有一些代码,需要将项目添加到ListAdapter和无效前面的列表,所以我打电话:
AlarmsAdapter mAdapater = (AlarmsAdapter) mAlarmsListFragment.getListAdapter();
mAdapater.add(a);
mAdapater.notifyDataSetChanged();
事情是,我得到一个NullPointerException因为getListAdapter()返回null,而getListView()工作正常..什么可能导致这个错误?
答
你需要调用setListAdapter
您ListFragment
,即:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mAdapter = new AlarmsAdapter(getActivity(), R.layout.alarm_card_item, alarmsList);
setListAdapter(mAdapter);
}
你不需要调用setAdapter
您的ListView。 ListFragment将处理它。
+0
这就解释了为什么我需要mAlarmsListFragment.getListView()。getAdapter()而不是getListAdapter ...两者之间有什么区别?编辑:哦,好的,setListAdapter不需要在setAdapter时引用列表,这就是为什么get语句搞乱了 – Mdk 2014-09-22 16:38:39
您是否尝试过在您的listfragment上创建自己的getadapter方法?并返回mAdapter? – 2014-09-22 16:36:51
这是我见过的最快的正确回复,mAlarmsListFragment.getListView()。getAdapter()工作,大小写关闭......但为什么getListAdapter()在这种情况下工作? – Mdk 2014-09-22 16:37:08