传递资源的更好方法是什么?

时间:2010-02-21 23:39:08

标签: android android-widget

需要专家的一些建议。我刚开始使用Android 编程,虽然我终于得到了我想要的“Hello World”,我觉得 好像我正在通过我的方式而不是把握概念。

我创建了三个EditText框。在那些我创造了三个Spinners。选一个 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);
}

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

有什么更好的方式?

1 个答案:

答案 0 :(得分:1)

嗯......嗯......你在这里做的很少我喜欢。处理简单的事情:

  • 要获取Spinner的值,请致电getSelectedItem()。在您使用EditText基于Spinner值填充Spinner_Listener的资源时,没有任何意义。在onItemSelected()的{​​{1}}方法中,您的Spinner称为parentSpinner继承自AdapterViewgetSelectedItem()AdapterView)上的方法。

  • 请勿致电getApplicationContext(),尤其是与UI相关的内容。您的ActivityContext - 只需使用它。

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

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

考虑到上述所有情况,您根本不需要Handle_Picks