0

そこにあなたの専門家からのいくつかのアドバイスが必要です。Androidプログラミングを始めたばかりで、ようやく「Hello World」でやりたいことができるようになりましたが、概念を把握するのではなく、自分の道を踏みにじっているように感じます。

3つのEditTextボックスを作成しました。それらの下に3つのスピナーを作成しました。スピナーで番号を選択すると、対応するEditTextボックスに表示されます。Spinner1はEditText1、Spinner2はEditText2、Spinner3はEditText3と相関関係があります。これを機能させるのに非常に時間がかかりました。片付けをする必要があります。

私のスタートアップクラスでは:

    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ボックスに数値を入力するクラスを作成しました。ユーザーがボタンを押して入力を行わないようにしたかったので、3つの数字が入力されたら、ボタンを押さなくても何かを実行します。

Handle_Picks hp = new Handle_Picks(g, pick_nums);

//ここがぎこちなくてぎこちないと思うところです。Handle_Picksを正しく機能させるために、コンテキスト、EditTextsの配列、およびクラスHandle_Pickshpへの参照を設定するメソッドを作成しました。

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_PicksI:

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を使用する前に、ContextとEditTextの配列をHandle_Picksクラスに渡さなければならないのは正しくないようです。ちょっと危険そうです。

より良い方法は何ですか?

4

1 に答える 1

1

うーん...まあ...あなたがここに持っているもののほとんどは私がとても好きではありません。簡単なことに取り組む:

  • の値を取得するにはSpinner、を呼び出しますgetSelectedItem()。価値EditTextに基づいてリソースを投入するためのリソースをいじくり回しても意味がありません。のメソッドでは、は(から継承し、のメソッドです)として知られていSpinnerます。Spinner_ListeneronItemSelected()SpinnerparentSpinnerAdapterViewgetSelectedItem()AdapterView

  • getApplicationContext()特にUI関連のものについては、呼び出さないでください。あなたActivityContext-ただそれを使ってください。

  • Activity(など)にコンストラクタを実装しないでくださいHandle_Picks

  • Activity直接インスタンスを作成しないでください(例:) new Handle_Picks()

上記のすべてを考えると、まったく必要ないはずですHandle_Picks

于 2010-02-22T00:47:24.947 に答える