2016-05-05 54 views
0

我有一個MainActivity提供了一個ViewPager,並且在這個Activity中有一個方法在應用程序獲得權限後填充ArrayList。
我通過此ArrayList與二傳手,但片段不考慮值傳遞

MainActivity.javaandroid -Fragment沒有從Activity獲取arrayList

@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; 
} 

logcat的

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 

如何獲取通過該setter方法傳遞的值?

+0

日誌顯示你已經擁有它。也許你沒有顯示它。 –

+0

使mSongList在你的片段中是靜態的 – Pavya

+0

@Pravin它沒有工作:/ – Sabatino

回答

0

從setSongList調用您的showListView方法。

+0

它給出一個NullPointerException – Sabatino

+0

首先像在創建時那樣檢查null。或者在ArrayList的主要活動中創建一個getter並直接訪問它,如下所示:((MainActivity)getActivity())。getSongList(); – Maslada

+0

片段只有在tabLayout中的另一個片段中出現時纔會顯示其元素,然後返回,換句話說:應用程序啓動時,onCreateView被調用並從主活動中獲取一個空數組列表,只有幾毫秒後,該活動的數組列表包含對象。 – Sabatino

相關問題