2014-01-24 57 views
0

好吧,我有一个包含大量列和行的表,并且需要从SQLite数据库中填充每个TextView。这就是我正在做的(深呼吸你注视它之前,它是你见过最糟糕的代码之一):动态更改要调用的变量

populateUrnik("Ponedeljek", 1, razred, pon1, pon1u); 
    populateUrnik("Torek", 1, razred, tor1, tor1u); 
    populateUrnik("Sreda", 1, razred, sre1, sre1u); 
    populateUrnik("Četrtek", 1, razred, cet1, cet1u); 
    populateUrnik("Petek", 1, razred, pet1, pet1u); 

    populateUrnik("Ponedeljek", 2, razred, pon2, pon2u); 
    populateUrnik("Torek", 2, razred, tor2, tor2u); 
    populateUrnik("Sreda", 2, razred, sre2, sre2u); 
    populateUrnik("Četrtek", 2, razred, cet2, cet2u); 
    populateUrnik("Petek", 2, razred, pet2, pet2u); 

    populateUrnik("Ponedeljek", 3, razred, pon3, pon3u); 
    populateUrnik("Torek", 3, razred, tor3, tor3u); 
    populateUrnik("Sreda", 3, razred, sre3, sre3u); 
    populateUrnik("Četrtek", 3, razred, cet3, cet3u); 
    populateUrnik("Petek", 3, razred, pet3, pet3u); 

    populateUrnik("Ponedeljek", 4, razred, pon4, pon4u); 
    populateUrnik("Torek", 4, razred, tor4, tor4u); 
    populateUrnik("Sreda", 4, razred, sre4, sre4u); 
    populateUrnik("Četrtek", 4, razred, cet4, cet4u); 
    populateUrnik("Petek", 4, razred, pet4, pet4u); 

    populateUrnik("Ponedeljek", 5, razred, pon5, pon5u); 
    populateUrnik("Torek", 5, razred, tor5, tor5u); 
    populateUrnik("Sreda", 5, razred, sre5, sre5u); 
    populateUrnik("Četrtek", 5, razred, cet5, cet5u); 
    populateUrnik("Petek", 5, razred, pet5, pet5u); 

    populateUrnik("Ponedeljek", 6, razred, pon6, pon6u); 
    populateUrnik("Torek", 6, razred, tor6, tor6u); 
    populateUrnik("Sreda", 6, razred, sre6, sre6u); 
    populateUrnik("Četrtek", 6, razred, cet6, cet6u); 
    populateUrnik("Petek", 6, razred, pet6, pet6u); 

    populateUrnik("Ponedeljek", 7, razred, pon7, pon7u); 
    populateUrnik("Torek", 7, razred, tor7, tor7u); 
    populateUrnik("Sreda", 7, razred, sre7, sre7u); 
    populateUrnik("Četrtek", 7, razred, cet7, cet7u); 
    populateUrnik("Petek", 7, razred, pet7, pet7u); 

    populateUrnik("Ponedeljek", 8, razred, pon8, pon8u); 
    populateUrnik("Torek", 8, razred, tor8, tor8u); 
    populateUrnik("Sreda", 8, razred, sre8, sre8u); 
    populateUrnik("Četrtek", 8, razred, cet8, cet8u); 
    populateUrnik("Petek", 8, razred, pet8, pet8u); 

    populateUrnik("Ponedeljek", 9, razred, pon9, pon9u); 
    populateUrnik("Torek", 9, razred, tor9, tor9u); 
    populateUrnik("Sreda", 9, razred, sre9, sre9u); 
    populateUrnik("Četrtek", 9, razred, cet9, cet9u); 
    populateUrnik("Petek", 9, razred, pet9, pet9u); 

    populateUrnik("Ponedeljek", 10, razred, pon10, pon10u); 
    populateUrnik("Torek", 10, razred, tor10, tor10u); 
    populateUrnik("Sreda", 10, razred, sre10, sre10u); 
    populateUrnik("Četrtek", 10, razred, cet10, cet10u); 
    populateUrnik("Petek", 10, razred, pet10, pet10u); 

    populateUrnik("Ponedeljek", 11, razred, pon11, pon11u); 
    populateUrnik("Torek", 11, razred, tor11, tor11u); 
    populateUrnik("Sreda", 11, razred, sre11, sre11u); 
    populateUrnik("Četrtek", 11, razred, cet11, cet11u); 
    populateUrnik("Petek", 11, razred, pet11, pet11u); 

因此,大家可以看到,我只更换3调用这些函数时的情况:1-11和两个textview变量pon1,pon1u等的数字(文字查看)

有没有办法让一个for循环改变哪个变量来调用dyinamiaclly?可能是这样的:

for (int i = 1; i <= 11; i++){ 
    populateUrnik("Ponedeljek", i, razred, pon(i), pon(i)u); 
} 

我知道上面的语法是不可能的,但我只是试图说明我想实现什么。

有关如何改善这种长而糟糕的代码的任何其他建议将非常受欢迎!

+0

使用反射。 http://docs.oracle.com/javase/tutorial/reflect/ – dinesh707

回答

0

我会考虑重新设计你的代码,类似这样的东西:

static class Razred {} 

static class DayDef {} 
static class Pon extends DayDef {} 
static class Tor extends DayDef {} 
static class Sre extends DayDef {} 
static class Cet extends DayDef {} 
static class Pet extends DayDef {} 

static class DayDefU {} 
static class PonU extends DayDefU {} 
static class TorU extends DayDefU {} 
static class SreU extends DayDefU {} 
static class CetU extends DayDefU {} 
static class PetU extends DayDefU {} 

static class Urnik { 

    private String string; 
    private int i; 
    private Razred razred; 
    private DayDef dayDef; 
    private DayDefU dayDefU; 

    public Urnik(String string, int i, Razred razred, DayDef dayDef, 
      DayDefU dayDefU) { 
       this.string = string; 
       this.i = i; 
       this.razred = razred; 
       this.dayDef = dayDef; 
       this.dayDefU = dayDefU; 
    } 

    // getters and setters for every field 

} 

public static void main(String[] args) { 

    Razred razred = new Razred(); 

    List<Urnik> urniks = new ArrayList<Urnik>(); 

    for (int i = 0; i < 11; i++){ 
     urniks.add(new Urnik("Ponedeljek", i+1, razred, new Pon(), new PonU())); 
     urniks.add(new Urnik("Torek", i+1, razred, new Tor(), new TorU())); 
     urniks.add(new Urnik("Sreda", i+1, razred, new Sre(), new SreU())); 
     urniks.add(new Urnik("Četrtek", i+1, razred, new Cet(), new CetU())); 
     urniks.add(new Urnik("Petek", i+1, razred, new Pet(), new PetU())); 
    } 

} 

但是,如果它不能这样做,我会建议反思@ dinesh707建议。