2010-02-21 3 views
0

전문가의 조언이 필요합니다. 나는 방금 안드로이드 프로그래밍을 시작했고 마침내 내 "Hello World"가 원하는 것을 얻었는데, 나는 마치 개념을 이해하는 것보다 내 방식대로 bludgening하는 것처럼 을 느낀다.자원을 전달하는 가장 좋은 방법은 무엇입니까?

3 개의 EditText 상자를 만들었습니다. 그 아래 나는 세 개의 스피너를 만들었습니다. 회 전자에서 번호를 선택하면 해당 편집 텍스트 상자에 나타납니다. 회 전자 1은 EditText 1, 회선 2는 EditText 2, 회 전자 3은 에 연결됩니다. 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); 

는 // 나는 스피너를 초기화하는 클래스를 만들었습니다.

// 해당 EditText 상자에 번호를 입력하는 클래스를 만들었습니다. 나는 사용자가 버튼을 눌러 을 채우는 것을 피하고 싶었고, 세 개의 숫자가 들어간 후에는 버튼을 누르지 않고도 그걸로 뭔가를 할 것이다. 나는 그것이 미봉책 어색 얻을 생각하는 곳 // 여기

Handle_Picks hp = new Handle_Picks(g, pick_nums); 

입니다. Handle_Picks가 으로 올바르게 작동하도록하려면 컨텍스트, EditTexts 배열을 설정하는 메서드를 만들고 Handle_Picks hp 클래스에 대한 참조를 생성했습니다. Spinner_Listener 클래스에서

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

//

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를 사용하기 전에 Context 및 EditText 배열을 Handle_Picks 클래스 에 전달해야합니다. 위험한 것 같습니다.

더 좋은 방법은 무엇입니까?

답변

1

음 ... 음 ... 네가 여기있는 것 중 아주 조금은 내가 맘에 든다. 쉬운 물건을 태클 :

  • Spinner의 값을 얻으려면, getSelectedItem()를 호출합니다. 귀하의 EditTextSpinner 값을 기반으로하여 채울 수있는 리소스를 둘러 보는 것은 의미가 없습니다. Spinner_ListeneronItemSelected() 방법에서 Spinnerparent (SpinnerAdapterView을 상속하며 getSelectedItem()AdapterView의 메소드 임)입니다.

  • 특히 UI 관련 항목에 대해서는 getApplicationContext()으로 전화하지 마십시오. ActivityContext입니다. 사용하면됩니다.

  • Activity (예 : Handle_Picks)에 생성자를 구현하지 마십시오.

  • Activity의 인스턴스를 직접 만들지 마십시오 (예 : new Handle_Picks()).

위의 내용을 모두 고려하면 Handle_Picks이 필요하지 않습니다.

관련 문제