Ich bin neu in Android. Ich greife auf eine ArrayList von einer anderen Klasse zu, aber beim Zugriff auf die Klasse bekomme ich keine Größe von ArrayList. In der Hauptklasse zeigt es einen positiven Wert der Größe der Array-Liste. Ich weiß nicht, warum ich null Größe beim Zugreifen auf die Klasse bekomme. Überprüfen Sie meinen Code auf Fehler.Holen ArrayList Größe Null beim Zugriff von einer anderen Klasse
Tab3Tracks Klasse
public class Tab3Tracks extends ListFragment {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
private ArrayList<String> trackslist = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab3tracks, container, false);
final String trackid = MediaStore.Audio.Media._ID;
final String trackno = MediaStore.Audio.Media.TRACK;
final String trackname = MediaStore.Audio.Media.TITLE;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = getContext().getContentResolver();
final String[] projection = {trackid,trackno,trackname,path
};
final Cursor cursor = cr.query(uri,projection,null,null,null);
if (cursor!=null){
if(cursor.moveToFirst()){
do{
int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}System.out.println(trackslist.size());
} cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist
);
setListAdapter(adapter);
return v;
}
public ArrayList<String> getList(){
return trackslist;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity(), NowPlaying.class);
// Sending songIndex to PlayerActivity
in.putExtra("songIndex", songIndex);
startActivityForResult(in, 100);
}
}
NowPlaying Klasse
public class NowPlaying extends AppCompatActivity {
public ArrayList<String> songsList = new ArrayList<String>();
public Tab3Tracks tab3tracks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
// Getting all songs list
tab3tracks = new Tab3Tracks();
songsList= tab3tracks.getList();
System.out.println("songsListSize"+songsList.size());
System.out.println("List" +songsList);
}
Ist das nicht offensichtlich? Sie instanziieren eine neue Instanz von * Tab3Tracks *, sodass die ArrayLists offensichtlich leer sind, da keine Lifecycle-Methode ausgelöst wird. Um auf Daten von dem Fragment zuzugreifen, sollten Sie den FragmentManager verwenden, um das Fragment zu erhalten, und dann die entsprechende Methode aufrufen. Siehe zum Beispiel [diese Frage] (http://stackoverflow.com/questions/10903077/calling-a-fragment-method-from-a-parent-activity) – reVerse