Android: die Schleife durch einen string-array, mit Hilfe der Logik für Vorsatz-Methode
Ich bin ein java Anfänger, und ich habe mit dem code unten, um eine Liste mit anklickbaren TextViews, dass eine bestimmte Klasse, wenn Sie angeklickt werden.
Es ist eine Liste von Fußball-team-Namen.
ZB.
Arsenal
Manchester United
Chelsea
Klick auf TextView-Arsenal (TextView id = ars) rufen ars.class
Klick auf TextView-Chelsea (TextView id = che)nennen wird che.class
Ich habe über 20-Fußball-team-Namen.
Ich habe ein array von textview-ids, die ich in einer Schleife durch, und ordnen Sie eine Klick-Aktion. Dies funktioniert sehr gut.
Ich habe ein string-array von teamnames, der code durchläuft den string-array und weist jedem Teamnamen auf ein Class-Objekt, das verwendet wird, in der Absicht, () - Methode.
Wenn ich diesen code ausführen, wird die Liste produziert, aber wenn ich auf ein team Namen, es öffnet sich immer Wol.java die Letzte position in dem string-array.
Brauche ich etwas Hilfe mit der Logik, so dass, wenn ich auf Arsenal es öffnet ars.class
Hier ist der code.
public final int[] teams = { R.id.ars, R.id.ast, R.id.bir, R.id.bla,
R.id.blp, R.id.bol, R.id.che, R.id.eve, R.id.ful, R.id.hul,
R.id.lee, R.id.liv, R.id.mid, R.id.mnc, R.id.mnu, R.id.nor,
R.id.nwu, R.id.por, R.id.qpr, R.id.sto, R.id.sun, R.id.swa,
R.id.tot, R.id.wes, R.id.wig, R.id.wol };
//String array of teamnames, named to correspond their class name.
public final String[] teamnames = { "ars", "ast", "bir", "bla", "blp",
"bol", "che", "eve", "ful", "hul", "lee", "liv", "mid", "mnc",
"mnu", "nor", "nwu", "por", "qpr", "sto", "sun", "swa", "tot",
"wes", "wig", "wol" };
TextView tv;
Class classname;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.m_transfers);
setTeamNames(); //Method sets up team names to a Class name.
for (int i = 0; i < teams.length; i++) {
tv = (TextView) findViewById(teams[i]);
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent open = new Intent(Transfers.this, classname);
startActivity(open);
}
});
}
;
}
public void setTeamNames() {
for (String s : teamnames) {
String name = "ttj.android.ft.teams." + s;
try {
classname = Class.forName(name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
;
}
- Sind Sie ernsthaft sagen, die Sie geschaffen haben 20 verschiedene Aktivitäten, eine für jedes team? Warum nicht einfach eine
Activity
(genanntTeamActivity
zum Beispiel), und übergeben Sie die team-Namen als stringExtra
imIntent
verwenden Sie fürstartActivity(...)
? - Sehr neu in android Entwicklung, noch immer in meinen Kopf Manifestiert. Ja habe ich 20 getrennte Aktivitäten im manifest. Könnte ich ein TeamActivity im manifest?
- Sie könnten sich einen TeamActivity im manifest der gleichen Weise, wie Sie aus den 20 verschiedenen Aktivitäten und dann, als MisterSquonk gesagt, nur fügen Sie einen string oder int in der Absicht, zu unterscheiden.
- Danke Jungs, ich gebe diese ein zu gehen. Wenn Sie sagen, die Absicht, beziehen Sie sich auf Intent-filter in der xml-Datei oder in der Absicht, die Methode in java? Entschuldigung für die noobie Fragen!
- Siehe meine Antwort. Nein, Sie müssen nicht ein
<intent-filter>
im manifest fürTeamActivity
weil Sie erstellen eine expliziteIntent
AngabeTeamActivity.class
- kein Vorsatz-filter benötigt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
classname
überschrieben wird jedes mal, wenn Sie Durchlaufen in der foreach-Schleife innerhalbsetTeamNames()
. Es wird also nur die Letzte classname bleibt am Ende.Wenn
teams
undteamnames
haben die gleiche Anzahl von Einträgen haben (was Sie sollten), können Sie den folgenden code verwenden und loszuwerdensetTeamNames()
komplett.final int j = i;
ersetzen und dannteamnames[i]
mitteamnames[j]
. Das kann das problem sein.Vorausgesetzt, dass die Aktivitäten, die Sie versuchen zu starten, haben ähnliche (oder die gleiche) layout und Funktionalität, zeigt aber verschiedene Daten zu dem jeweiligen team, versuchen Sie die folgenden.
Ändern Sie Ihre
onClick(View v)
- Methode wie folgt...Dann erstellen Sie eine "generische"
Activity
...Registrieren Sie sich einfach den
TeamActivity
in Ihrem manifest und Sie sollten gut zu gehen.