3

我偶尔会NullPointerException在填充我的 ListFragment 的 ArrayAdapter 中得到一个。似乎getActivity()返回 null,但据我所知,它不应该那样做。

适配器代码inflater = (LayoutInflater)...是异常行:

@Override
public View getView( int position, View convertView, ViewGroup parent )
{
    view = convertView;

if ( view == null )
{
    /* Inflate a row */
    inflater = (LayoutInflater)getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE ); // THIS IS THE EXCEPTION LINE
    view = inflater.inflate( R.layout.pairing_list_row, parent, false );
}

我正在使用 Loader 来获取数据,并且在方法之前我不会初始化它onActivityCreated。在加载器完成加载之前不会创建适配器,因此它不应该在onActivityCreated.

@Override
public void onActivityCreated( Bundle savedInstanceState )
{
    super.onActivityCreated( savedInstanceState );
    getLoaderManager().initLoader( 0, null, this );
}

@Override
public void onLoadFinished( Loader<Cursor> loader, Cursor cursor )
{   
    PairingArrayAdapter pairings = (PairingArrayAdapter)getListAdapter();
    if ( pairings == null )
    {
        pairings = new PairingArrayAdapter( getActivity(), R.layout.pairing_list_row );
        setListAdapter( pairings );
    }
    ...

关于导致 NullPointerException 的任何想法?它不会一直发生,它会发生一次,我再次做同样的事情,它不会发生。我想不通。

4

2 回答 2

0

我已经确定唯一可能的解释是FragmentStatePagerAdapter我正在使用的 导致onLoadFinished在某些情况下分离 Fragment 时调用,因此需要在运行时检查附加的活动getView

于 2012-12-02T19:23:22.950 回答
0

在里面ArrayAdapter.getView(),使用getContext()代替getActivity()

getActivity()有时可以null在活动轮换期间短暂返回,而在相同情况下getContext()不会返回。null此问题发生在 Android 4.2、4.1 及更低版本上。

于 2018-04-25T21:25:02.270 回答