2016-04-16 10 views
1

Ist das überhaupt möglich? Nehmen wir an, ich habe eine ListView mit einer Arraylist erstellt, die mit Objekten in einer Aktivität gefüllt ist. Jetzt klickte ich auf einen Gegenstand in der Listenansicht und griff nach dem Index. Sobald ich auf den Gegenstand geklickt habe, bringt er mich zu einer anderen Aktivität zusammen mit der Indexnummer (mit Intent). Nun meine Frage ist, ich möchte die Informationen des angeklickte Artikels mit der Indexnummer anzeigen, um auf die Arraylist zuzugreifen, die in der vorherigen Aktivität erstellt wurde. Ist das möglich?Zugriff auf Arraylist, die in einer Aktivität in einem anderen erstellt wurde mit Index

AKTUALISIERT MIT DER ARTIKELKLASSE. Nicht sicher, wie soll ich Singletonklasse ÄNDERN

public class Item { 

private String name; 
private String category; 
private int grade; 

public void setName(String n){ 

    name = n; 
} 

public void setCategory(String c){ 

    category = c; 
} 
public void setGrade(int g){ 

    grade = g; 
} 
public String getName(){ 
    return name; 
} 
public String getCategory(){ 

    return category; 

} 
public int getGrade(){ 
    return grade; 
} 

@Override 
public String toString(){ 

    return getName(); 
} 


} 

Antwort

1

Ich kann mir drei verschiedene Methoden, die Sie tun, helfen können:

1. Methode

Sie das Objekt übergeben können Sie als Statist in einer Intent verwenden möchten. Dazu muss das Objekt serialisierbar sein, wie @androidLover früher sagte. Bitte beachten Sie den Link von seiner Antwort.

2. Methode

Um eine Art von Singleton-Klasse zu verwenden, die die Liste der Objekte enthält. http://www.tutorialspoint.com/design_pattern/singleton_pattern.htm

Aufgrund der Tatsache, dass Sie nach dem click-Ereignis in der ListView den Index des gewünschten Objekts haben, können Sie dieses Objekt problemlos aus der Singleton-Klasse abrufen.

3. Methode

Verwenden etwas namens eine EventBus. http://square.github.io/otto/

Das wird die Komplexität Ihrer App leicht erhöhen, daher ist es ein bisschen übertrieben, diesen Ansatz zu verwenden. Aber es ist immer noch gültig.

+0

Ich mag die Idee der Singleton-Klasse. Ich denke, das ist es, wonach ich hauptsächlich gesucht habe. Ich habe eine Klasse für einen Gegenstand. Ich weiß nicht, ob das ist, was ich ändern sollte – Carlitos

+1

Ihre Singleton-Klasse sollte eine Liste von Elementen darin haben. Sie sollten die Item-Klasse nicht ändern, sondern eine neue getrennte Klasse erstellen. Es wird so etwas wie ein Container für die Liste der Artikel sein. Bitte beachten Sie das folgende Beispiel, um ein Beispiel zu sehen [link] (https://gist.github.com/todorBG/85bd61103215b72831cb479d73476d9a) –

0

Mit der Absicht, können Sie die Liste und die Position auf eine andere Tätigkeit passieren tun:

Intent intent = new Intent(MainActivity.this, NextActivity.class); 
intent.putExtra("KeyList", MyList); 
intent.putExtra("PositionKey", thePositionClicked); 

Im NextActiviy, müssen Sie nur die Liste erhalten und die Position:

Intent intent = getIntent(); 
ArrayList<String> reciveList = intent.getStringArrayListExtra("KeyList"); 
String position = intent.getStringExtra("PositionKey"); 

Jetzt Sie müssen nur die Position in reciveList anpassen. Sie können Absicht Dokumentation für weitere Details prüfen: http://developer.android.com/reference/android/content/Intent.html

+0

Nur eine kurze Bemerkung - Das ist nützlich, wenn Sie nur einfache Objekte durch Aktivitäten übergeben möchten (zB String , Ganzzahl usw.). Sie sind serialisierbar. Aber wenn Sie Ihre eigenen Objekte übergeben wollen (sagen wir Person, Auto, etc.), müssen Sie sie serialisierbar machen, sonst wird es nicht funktionieren. –

+0

Oh, ja. Wenn Sie ein Objekt übergeben, müssen Sie Serializable in Ihrem Objekt implementieren. So übergeben Sie das Objekt an eine andere Aktivität, und Sie können die Verwendung von intent.getSerializableExtra() – Adley

-1

try Verwendung Parcelable Absicht ausgewählte Objekt durch

+0

Werfen Sie einen Blick auf die Syntax für die Benennung eines Weblinks. Ich weiß, es ist verwirrend :) – roadrunner66

+0

hab es geschafft. Vielen Dank) – falk

0

Fisrt Methode Sie
putParcelableArrayListExtra (String name, ArrayList<? extends Parcelable> value) von here können passieren. Und übergeben Sie Ihre ArrayList und erhalten Sie Ihr Objekt mit dem Index, den Sie innerhalb Ihrer zweiten Aktivität in Ihrem ListView innerhalb OnItemClick übergeben.

Zweite Methode können Sie
in Ihrem OnItemClick Listview verwenden activiy den Index und das Objekt zu erhalten und wandeln dann das Objekt mit Gson zu GsonObject und es putExtra Sie ein Beispiel here finden Verwendung übergeben.

Verwandte Themen