Ich bin neu in Android-Programmierung und ich habe Probleme beim Übergeben einer ArrayList eines Parcelable an ein Fragment. Dies ist die Aktivität, die gestartet wird (funktioniert gut!) feedlist ist eine ArrayList eines parcelable Music.Android: Pass Daten (Extras) zu einem Fragment
Intent in = new Intent(context, ListMusicsActivity.class);
in.putExtra("arrayMusic", feedList);
activity.startActivity(in);
Das Fragment Aktivität onCreate() Methode:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymusiclist);
if(savedInstanceState != null)
{
ListMusicFragment frag = new ListMusicFragment();
frag.setArguments(getIntent().getExtras());
}
}
Das Fragment Code:
public class ListMusicFragment extends SherlockFragment{
private ArrayList<Music> listMusics = new ArrayList<Music>();
private ListView listMusic;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
listMusics = (ArrayList<Music>) getArguments().getSerializable("arrayMusic");
View view = inflater.inflate(R.layout.musiclistview, container, false);
listMusic = (ListView) view.findViewById(R.id.musicListView);
listMusic.setAdapter(new MusicBaseAdapter(getActivity(), listMusics));
return view;
}
}
denke ich, das Problem in der Leitung ist
listMusics = (ArrayList<Music>) getArguments().getSerializable("arrayMusic");
Schließlich diese ist mein Musikunterricht:
public class Music implements Parcelable{
private String url;
private String artist;
private String title;
private String duration;
private String info_url;
private String lyrics;
public Music(String url, String artist, String title,
String duration, String lyrics, String info_url)
{
this.url = url;
this.artist = artist;
this.title = title;
this.duration = duration;
this.lyrics = lyrics;
this.info_url = info_url;
}
public Music(Parcel in)
{
url = ParcelUtils.readString(in);
artist = ParcelUtils.readString(in);
title = ParcelUtils.readString(in);
duration = ParcelUtils.readString(in);
info_url = ParcelUtils.readString(in);
lyrics = ParcelUtils.readString(in);
}
public String getUrl()
{
return url;
}
public String getArtist()
{
return artist;
}
public String getTitle()
{
return title;
}
public String getDuration()
{
return duration;
}
public String getLyrics()
{
return lyrics;
}
public String getInfo()
{
return info_url;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
ParcelUtils.writeString(dest, url);
ParcelUtils.writeString(dest, artist);
ParcelUtils.writeString(dest, title);
ParcelUtils.writeString(dest, duration);
ParcelUtils.writeString(dest, lyrics);
ParcelUtils.writeString(dest, info_url);
}
public static final Parcelable.Creator<Music> CREATOR =
new Parcelable.Creator<Music>() {
public Music createFromParcel(Parcel in)
{
return new Music(in);
}
public Music[] newArray(int size)
{
return new Music[size];
}
};
}
Wenn ich diesen Code ausführen das Problem, das ich bekommen, ist eine java.lang.NullPointerException im Fragment onCreateView() -Methode. Ich würde mich sehr freuen, wenn jemand mich in die richtige Richtung zeigen würde, um zu sehen, wo ich versage.
EDIT: Problem gelöst: Ich brauchte nur diese Zeile mit dem Fragment Aktivität onCreate() -Methode (othwewise die getArguments() zurückkehren würde null) hinzuzufügen:
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, frag).commit();
und fügen Sie diese an das Fragment Code:
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if(bundle != null)
{
listMusics = bundle.getParcelableArrayList("arrayMusic");
listMusic.setAdapter(new MusicBaseAdapter(getActivity(), listMusics));
}
}
wo ist listMusics ein ArrayList
von Parcelable
Musik.
Der erste Schritt besteht darin, das LogCat-Fenster zu öffnen, die Ausnahme zu betrachten und festzustellen, was die NullPointerException verursacht. Wenn Sie es nicht herausfinden können, dann setzen Sie den StackTrace von der Ausnahme in Ihre Fragen, damit jemand helfen kann. – Brian
BrianV: Danke für den Tipp! Hier ist es das LogCat, das ich bekomme, wenn ich das Programm ausführe! http://pastebin.com/ycVcXLFf – pluralism
Sieht aus, als hätten Sie einen Fehler in Ihrer Ansichts-Layoutdatei: ** Verursacht von: android.view.InflateException: Binär-XML-Dateizeile # 10: Fehler beim Aufblasen des Klassenfragments ** – Brian