ArrayAdapter中的getActivity()有时会返回null

时间:2012-11-30 18:50:07

标签: android android-fragments android-arrayadapter

我偶尔会在我的ArrayAdapter中获得NullPointerException来填充我的ListFragment。似乎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的原因的任何想法?它不会一直发生,只发生一次,我再次做同样的事情而且不会发生。我无法理解。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Dataset<Row> processByRowUpdate(Dataset<Row> dsRecords, SparkSession sparkSession) { List<Row> rows = dsRecords.select("accountIdentifier", "accountNumber").collectAsList(); List<MongoRecord> newRows = new ArrayList<MongoRecord>(); ListIterator<Row> it = rows.listIterator(); boolean errorOccurred = false; while (it.hasNext()) { try { Row record = it.next(); MongoRecord mongo = new MongoRecord(); if (!record.isNullAt(record.fieldIndex("accountIdentifier"))) mongo.setAccountIdentifier(String.valueOf(record.getDouble(record.fieldIndex("accountIdentifier")))); //... and so on newRows.add(mongo); } catch (Exception exception) {} sparkSession.createDataFrame(newRows, MongoRecord.class); 内,使用ArrayAdapter.getView()代替getContext()

getActivity()有时可以在“活动”轮播期间短暂返回getActivity(),而null在同一情况下不会返回getContext()。 Android 4.2,4.1及更低版本会出现此问题。