2016-05-05 51 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

相关问题