3

NullPointerExceptionListFragmentにデータを入力するArrayAdapterがときどき表示されます。nullを返しているように見えgetActivity()ますが、私が知る限り、そうすべきではありません。

アダプタコード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 );
}

ローダーを使用してデータを取得していますが、メソッドが実行されるまでデータを初期化しません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

I've determined that the only possible explanation is that the FragmentStatePagerAdapter that I'm using causes onLoadFinished to be called when the Fragment is detached in certain circumstances, thus necessitating a check for an attached activity when running getView.

于 2012-12-02T19:23:22.950 に答える
0

Inside ArrayAdapter.getView(), use getContext() instead of getActivity().

getActivity() can sometimes return null for a brief moment during an Activity rotation, whereas getContext() does not return null in the same situation. This problem happens on Android 4.2, 4.1 and below.

于 2018-04-25T21:25:02.270 に答える