Android:通过一个string数组循环 – 帮助需要逻辑的意图方法

我是一个java新手,我已经使用下面的代码来显示一个可点击的TextView列表,当他们被点击时调用一个特定的类。

这是一个足球队名单。

例如。

阿森纳曼联切尔西

点击TextView Arsenal(TextView id = ars)会调用ars.class点击TextView切尔西(TextView id = che)会调用che.class

我有20多个足球队的名字。

我有一个textview ID的数组,我循环并分配给他们一个可点击的行动。 这工作正常。

我有一个队名string数组,代码遍历string数组,并将每个队名分配给Intent()方法中使用的Class对象。

当我运行这个代码时,会产生这个列表,但是当我点击一个团队名时,它总是打开Wol.java,这是string数组中的最后一个位置。

我需要一些有关逻辑的帮助,所以当我点击阿森纳时,它会打开ars.class

这是代码。

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(); } } ; } 

Solutions Collecting From Web of "Android:通过一个string数组循环 – 帮助需要逻辑的意图方法"

每次迭代setTeamNames()中的foreach循环时, setTeamNames()覆盖classname 。 因此,只有最后一个类名留在最后。

如果teamsteams具有相同数量的条目(他们应该),则可以使用以下代码并完全摆脱setTeamNames()

 final String prefix = "ttj.android.ft.teams."; for (int i = 0; i < teams.length; i++) { tv = (TextView) findViewById(teams[i]); tv.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try { Class class = Class.forName(prefix + teamnames[i]); Intent open = new Intent(Transfers.this, class); startActivity(open); } catch (ClassNotFoundException e) { e.printStackTrace(); } }); } ; 

假设您尝试启动的活动具有相似(或相同)的布局和function,但显示的是每个团队特有的不同数据,请尝试以下操作。

按如下方式更改您的onClick(View v)方法…

 tv.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent open = new Intent(Transfers.this, TeamActivity.class); open.putExtra("team", ((TextView)v).getText()); startActivity(open); } }); 

然后创build一个“通用” Activity

 public class TeamActivity extends Activity { String teamName = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout here // Get the Intent and team name with the following... teamName = getIntent().getStringExtra("team"); // Do something with teamName } } 

只要将TeamActivity注册到您的清单中,您应该很好。