Android:通过字符串数组循环 - 对于intent方法的逻辑需要帮助

tip*_*jat 7 java arrays logic android android-intent

我是一个java新手,我使用下面的代码显示一个可点击的TextView列表,在单击它们时调用特定的类.

这是足球队名单.

例如.

阿森纳曼联切尔西队

单击TextView Arsenal(TextView id = ars)将调用ars.class单击TextView Chelsea(TextView id = che)将调用che.class

我有超过20个足球队的名字.

我有一个textview id数组,我循环并为它们分配一个可点击的动作.这很好用.

我有一个团队名字的字符串数组,代码循环遍历字符串数组并将每个teamname分配给一个Class对象,该对象在Intent()方法中使用.

当我运行此代码时,会生成列表但是当我单击团队名称时,它总是打开Wol.java,它是字符串数组中的最后一个位置.

我需要一些关于逻辑的帮助,所以当我点击Arsenal时它会打开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();
        }
    }
    ;
}
Run Code Online (Sandbox Code Playgroud)

Tus*_*har 5

classname每次在foreach循环内部迭代时都会被覆盖setTeamNames().因此,只有最后一个类名保留在最后.

如果teams并且teamnames具有相同数量的条目(它们应该),您可以使用以下代码并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();
        }
    });
}
;
Run Code Online (Sandbox Code Playgroud)