我是一个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(); } } ; }
每次迭代setTeamNames()
中的foreach循环时, setTeamNames()
覆盖classname
。 因此,只有最后一个类名留在最后。
如果teams
和teams
具有相同数量的条目(他们应该),则可以使用以下代码并完全摆脱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
注册到您的清单中,您应该很好。