2010-02-21 64 views
0

需要你的专家在那里的建议。我刚刚开始使用Android 编程,虽然我终于得到了我想要的“Hello World”所要做的事情,但我觉得 好像我在扼杀我的方式而不是理解概念。传递资源的更好方法是什么?

我创建了三个EditText框。在那些我创造了三个Spinners之下。在Spinner中选择一个 数字,它将显示在相应的EditText框中。 微调1相关的EditText 1,微调2到EditText 2和微调3到 EditText 3.我有一个时间让这个工作。我确实有一些 清理工作要做。

在我的启动I类:

EditText [] pick_nums = new EditText[3]; 
    pick_nums[0] = (EditText) findViewById(R.id.r1c1); 
    pick_nums[1] = (EditText) findViewById(R.id.r1c2); 
    pick_nums[2] = (EditText) findViewById(R.id.r1c3); 

    Spinner test1 = (Spinner) findViewById(R.id.spin_pick_num1); 
    Spinner test2 = (Spinner) findViewById(R.id.spin_pick_num2); 
    Spinner test3 = (Spinner) findViewById(R.id.spin_pick_num3); 

//我创建了一个类来初始化微调。

Context g = getApplicationContext(); 
    Initialize_stuff spin1 = new Initialize_stuff(test1, g); 
    Initialize_stuff spin2 = new Initialize_stuff(test2, g); 
    Initialize_stuff spin3 = new Initialize_stuff(test3, g); 

//我创建了一个类,把数字放在相应的EditText框中。 我想避免让用户按下一个按钮来填充 ,并且一旦有三个数字在,我会与他们做一些事情,而不必按 按下按钮。

Handle_Picks hp = new Handle_Picks(g, pick_nums); 

//这里是我认为它会变得笨拙和尴尬的地方。为了使Handle_Picks正确工作 我创建了一个方法来设置上下文,一个EditTexts数组和一个Handle_Picks hp类的引用。

Spinner_Listener listen = new Spinner_Listener();  
listen.set_context(g, pick_nums, hp); 
test1.setOnItemSelectedListener(listen); 
test2.setOnItemSelectedListener(listen); 
test3.setOnItemSelectedListener(listen); 

//在Spinner_Listener类

public class Spinner_Listener implements OnItemSelectedListener 

static Handle_Picks hp1; //set in a method 
private String num; 
String v; 
String spin_id; 
int vv; 

public void onItemSelected(AdapterView<?> parent, View view, int pos, 
     long id) 
{ 
    //To make this work I had to find the name of the spinner that was 
    //used so I could correlate it with the right EditText 

    vv = parent.getId(); 
    v = parent.getResources().getResourceName(vv); 
    spin_id = parent.getResources().getResourceEntryName(vv); 
    setNum(parent.getItemAtPosition(pos).toString()); 
} 

public void setNum(String s) 
{ 
    num = s; 
    hp1.handle_nums(spin_id, num); 
} 

//终于类Handle_Picks我:

public class Handle_Picks extends Activity 
{ 
    static Context theContext; 
    EditText [] et; 
    String spin_num; 

// constructor 
Handle_Picks(Context f, EditText[] array) 
{ 
    theContext = f; 
    et = array; 
} 


public void handle_nums(String id, String aNumber) 
{ 
    spin_num = id; 
    if (spin_num.equalsIgnoreCase("spin_pick_num1")) 
     et[0].setText(aNumber); 
    else if (spin_num.equalsIgnoreCase("spin_pick_num2")) 
     et[1].setText(aNumber); 
    else if (spin_num.equalsIgnoreCase("spin_pick_num3")) 
     et[2].setText(aNumber); 
} 

有没有更好的方式来传递或参考资料各地的各种类? 必须将Context和数组EditText传递给类Handle_Picks 才能使用类Spinner_Listener中的Handle_Picks看起来不正确。 似乎有点危险。

什么是更好的方法?

回答

1

嗯......呃...很少有你在这里的东西,我喜欢很多。应对简单的东西:

  • 要获得Spinner的值,调用getSelectedItem()。根据Spinner的价值,您无法根据资源来填充EditText。在您的Spinner_ListeneronItemSelected()方法中,您的Spinner被称为parentSpinner继承自AdapterView,并且getSelectedItem()AdapterView上的方法)。

  • 不要致电getApplicationContext(),特别是与UI相关的东西。您的ActivityContext - 只是使用它。

  • 千万不要在Activity上实施构造函数(例如Handle_Picks)。

  • 不要直接创建Activity的实例(例如new Handle_Picks())。

鉴于以上所述,您根本不需要Handle_Picks