2016-08-01 32 views
0

Hallo an alle ich brauche, wie Daten von Aktivität passs wenn eine einfachen Möglichkeit,Wie Sie Daten von Aktivität zu Frage in Tab-Layouts ..?

ich mithilfe von Schnittstelle implementieren muß fragmentieren

Hier ist das Beispiel meines Datentypen ist.

Ich benutze die Dummy-Werte für die Erläuterung des Codes in, aber meine Fallwerte stammen aus Web-API.

Jetzt Problem ist, ich habe eine Aktivität mit zwei Registerkarte. tab1 oder tab2

, wenn die Aktivität beginnt dann die Daten vom Server fatch und speichern Sie es auf der Liste benutzerdefinierte Array. z. Finaldata in meinem Fall

jetzt in tab1 hier ist eine Listenansicht, die die Liste von Finaldata

Hier ist der Code von onCreateView des Fragments erhalten. Ich muss die endgültigen Datenwerte von Hauptaktivität zu Fragment Adapterdaten Liste übergeben. unter

ArrayList<PreviewData> finaldata = new ArrayList<PreviewData>(); 
for(int i=0;i<10;i++) { 
    PreviewData tempdata = new PreviewData("listname"+i+"","dsdsdsd","sdsdsdd"); 
    finaldata.add(tempdata); 
} 

Constant.data=finaldata; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    mydbhelper = new DBhelper(getContext()); 
    view = inflater.inflate(R.layout.view_all_campaign, container, false); 
    ArrayList<PreviewData> adapterdata= new ArrayList<PreviewData>(); 
    listView = (ListView) view.findViewById(R.id.campaign_list_view); 
    adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata); 
    listView.setAdapter(adapter); 
    return view; 
} 
+0

Wenn Liste benutzerdefinierte Array in Ihrem Fragmente zuerst muß genau das Arraylist zweites Fragment passieren! – Piyush

+0

ja ich weiß aber wie ......? – sunny

+0

Making Methode neue Instanz des zweiten Fragments und verwenden Bundle für die Weitergabe von Daten mit _setArguments() _ Methode – Piyush

Antwort

1

Erstellen Sie eine Konstante Klasse wie unten

public Constant{ 

    public static ArrayList<Previewdata> data=null; 

} 

Dann wie Array-Wert der konstanten Klasse zuweisen und retrive von Fragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    mydbhelper = new DBhelper(getContext()); 
    view = inflater.inflate(R.layout.view_all_campaign, container, false); 
    ArrayList<PreviewData> adapterdata= Constant.data; 
    listView = (ListView) view.findViewById(R.id.campaign_list_view); 
    adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata); 
    listView.setAdapter(adapter); 
    return view; 
} 
+0

Thnx bro ich werde versuchen und rply Sie – sunny

+0

ich wl NullPointerException – sunny

+0

zurückgeben, wo es Null Zeiger zeigt .. – Andolasoft

1

Bitte hinzufügen dieser Code zu deinem Aktivität, wenn Sie das Fragment nennen:

Bundle bundle = new Bundle(); 
ArrayList<PreviewData> finaldata = new ArrayList<PreviewData>(); 
bundle.putSerializable("myArray",(Serializable)finaldata); 
// set Arguments 
Fragmentclass obj = new Fragmentclass(); 
obj.setArguments(bundle); 

Aber zuerst machen Ihre PreviewData wie wie folgt (Name zum Beispiel):

public class PreviewData implements Serializable{ 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
     } 
    } 

erhalten dann Ihr Objekt in Ihrem Fragment wie:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
mydbhelper = new DBhelper(getContext()); 
view = inflater.inflate(R.layout.view_all_campaign, container, false); 

ArrayList<PreviewData> adapterdata= new ArrayList<PreviewData>(); 
adapterdata = getArguments().getStringArrayList("myArray"); 
listView = (ListView) view.findViewById(R.id.campaign_list_view); 

adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata); 
listView.setAdapter(adapter); 
return view; 
} 
+0

'putStringArrayList (String Schlüssel, ArrayList Wert)' ... 'finaldata' hier ist keine ArrayList von Strings. –

+1

PreviewData ist schon eine Getter Setter-Klasse bro also warum muss man neue Klasse machen .....? – sunny

+0

Im Idealfall sollten Sie stattdessen "Parcelable" implementieren –

0

In Aktivität:

public ArrayList<PreviewData> getAdapterData { 
    return finaldata; 
} 

In Fragmente:

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ArrayList<PreviewData> adapterdata = ((YourActivity) getActivity()).getAdapterData(); 
    adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata); 
    listView.setAdapter(adapter); 
}