0

需要一些专家的建议。我刚刚开始使用 Android 编程,虽然我终于得到了我想要我的“Hello World”做的事情,但我觉得我好像在摸索,而不是掌握概念。

我创建了三个 EditText 框。在这些之下,我创建了三个 Spinner。在 Spinner 中选择一个数字,它将显示在相应的 EditText 框中。Spinner 1 与 EditText 1 相关联,Spinner 2 与 EditText 2 相关联,Spinner 3 与 EditText 3 相关联。我花了很长时间才让它工作。我确实有一些清理工作要做。

在我的创业课上,我:

    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 I 类中:

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

有没有更好的方法来传递或引用各种类的资源?在我可以使用 Spinner_Listener 类中的 Handle_Picks 之前,必须将 EditText 的 Context 和数组传递给类 Handle_Picks 似乎不对。好像有点危险

有什么更好的方法?

4

1 回答 1

1

嗯……嗯……你在这里的东西很少我喜欢。处理简单的事情:

  • 要获取 a 的值Spinner,请调用getSelectedItem()EditText你乱用资源来填充你的价值是没有意义的Spinner。在你Spinner_ListeneronItemSelected()方法中,你Spinner被称为parentSpinner继承自AdapterView,并且getSelectedItem()是一个方法AdapterView)。

  • 不要调用getApplicationContext(),尤其是与 UI 相关的东西。你Activity是一个Context- 只是使用它。

  • Activity永远不要在(例如,Handle_Picks)上实现构造函数。

  • 永远不要直接创建一个实例Activity(例如,new Handle_Picks())。

鉴于以上所有情况,您根本不需要Handle_Picks

于 2010-02-22T00:47:24.947 回答