2016-05-05 7 views
0

私はViewPagerを提供するMainActivityを持っています。このアクティビティでは、アプリケーションがアクセス権を取得するとArrayListを満たすメソッドがあります。

アンドロイド - フラグメントがアクティビティからarrayListを取得しない

Logcat

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_CODE: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(context, "Permission granted", Toast.LENGTH_SHORT).show();   
       mArraySongs = listAllSongs(); 
       listFragment.setSongsList(mArraySongs); 
       Log.d("test arraylist in activity: ", Integer.toString(mArraySongs.size())); 
      } else { 
       Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show();   
      } 
      break; 
    } 
} 

ListFragment.java

public void setSongsList(ArrayList<Song> songsList) { 
    this.mSongList = songsList; 
    Log.d("test fragment setSongsList", Integer.toString(mSongList.size())); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    mInflater = inflater; 
    mContext = container.getContext(); 
    mContainer = container; 
    Log.d("test fragment onCreateView", Integer.toString(mSongList.size())); 

    //check if ArrayList is empty 
    if(mSongList == null || mSongList.isEmpty()){ 
     rootView = mInflater.inflate(R.layout.error_no_songs, mContainer, false); 
    } else showListView(); 
    return rootView; 
} 

MainActivity.java私はセッターでこのArrayListのを渡すが、フラグメントが

を渡された値を考慮していません

05-06 01:36:50.118 5272-5272/com.sebb.vilify D/test fragment onCreateView: 0 05-06 01:36:50.817 5272-5272/com.sebb.vilify D/test fragment setSongsList: 7 05-06 01:36:50.817 5272-5272/com.sebb.vilify D/test arraylist in activity: 7 

このセッターメソッドで渡された値はどのように取ることができますか?

+0

ログには既にそれがあることが示されています。多分あなたはそれを表示していないでしょう。 –

+0

フラグメント内の静的なmSongListを作成します – Pavya

+0

@Pravin動作しませんでした:/ – Sabatino

答えて

0

setListListからshowListViewメソッドを呼び出します。

+0

NullPointerExceptionを返します。 – Sabatino

+0

作成時に最初にnullをチェックします。または、arraylistの主なアクティビティでgetterを作成し、直接このようにアクセスします。((MainActivity)getActivity())。getSongList(); – Maslada

+0

フラグメントは、tabLayoutの別のフラグメントに移動してから、別の言い方をすると、要素が表示されます。つまり、アプリケーションが起動されると、onCreateViewが呼び出され、メインアクティビティから空のarraylistが取り出されます。 。 – Sabatino

関連する問題