2011-10-29 4 views
1

다음과 같은 주요 응용 프로그램 클래스가 있고 같은 클래스 또는 다른 클래스에서 메서드를 호출하는 한 줄을 변경하는 방법을 알고 싶습니다. 반면 다른 호출자는 여전히 호출합니다 활동. 지금 내가 이것을 가지고안드로이드 - 클래스 대신 SDK를 호출

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { AboutActivity.this.getString(R.string.feedback_email) }); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, AboutActivity.this.getString(R.string.feedback_subject)); 
    emailIntent.setType("plain/text"); 
    startActivity(emailIntent); 

:

adapter.add(createTextItem(R.string.info_about, AboutActivity.class)); 

내가 예를 들어이 작업을 수행하는 방법을 문의하고 싶습니다 : 문제

public class InfoActivity extends GDListActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTitle(R.string.info_activity_title); 

    ItemAdapter adapter = new ItemAdapter(this); 
    adapter.add(createTextItem(R.string.info_about, AboutActivity.class)); 
    adapter.add(createTextItem(R.string.info_terms, TermsActivity.class)); 
    adapter.add(createTextItem(R.string.info_privacy, PrivacyActivity.class)); 

    setListAdapter(adapter); 
} 

private TextItem createTextItem(int stringId, Class<?> klass) { 
    final TextItem textItem = new TextItem(getString(stringId)); 
    textItem.setTag(klass); 
    return textItem; 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    final TextItem textItem = (TextItem) l.getAdapter().getItem(position); 
    Intent intent = new Intent(InfoActivity.this, (Class<?>) textItem.getTag()); 
    startActivity(intent); 
} 
} 

라인 : 여기에 코드입니다 AboutActivity의 onCreate 메소드에 있지만, 자연스럽게 활동 내에서이 기능 (이메일 전송)을 가질 이유가 없습니다. 대신 그것은 단지 그대로 달릴 수 있습니다. 그럼 내가 어떻게 할 수 있니?

감사합니다.

다른 두 라인 :

adapter.add(createTextItem(R.string.info_terms, TermsActivity.class)); 
    adapter.add(createTextItem(R.string.info_privacy, PrivacyActivity.class)); 

들은 기능면에서 동일하게 유지 할 수 있습니다. 이 질문은 (앞서 질문과 대답있어)이 하나에서 추가 사항입니다 : 당신이 이것에 대해가는 것을 선택 이제까지 트릭이 실제로 결정이 수행 할 작업에 대한 만들고 이동하는 방법

Android - call method instead of class - sdk

답변

1

때 특정 항목은 onListItemClick 방법으로 클릭됩니다. 다음은 간단한 접근법입니다. 첫째,이에 createTextItem 방법을 변경 :

private TextItem createTextItem(int stringId) { 
    final TextItem textItem = new TextItem(getString(stringId)); 
    return textItem; 
} 

을 그런 변경하려면 onListItemClick이에 :

protected void onListItemClick(ListView l, View v, int position, long id) { 
    final TextItem textItem = (TextItem) l.getAdapter().getItem(position); 
    String textItemContents = textItem.getString(); //I don't know if this is actually correct. I don't know what the TextItem class is. But I think you get the idea. 
    Intent intent = getIntentForString(textItemContents); 
    startActivity(Intent); 
} 

다음이 같은 (우리가 스위치 인해를 사용할 수 없습니다 보일 것입니다 귀하의 getIntentForString() 방법 문자열에 switch 문을 사용하기위한 지원은 최근에 java에 추가되었습니다.

private Intent getIntentForString(String textViewContents){ 
    if(textViewContents.equals(getString(R.string.info_about))){ 
    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { 
     AboutActivity.this.getString(R.string.feedback_email) }); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
     AboutActivity.this.getString(R.string.feedback_subject)); 
    emailIntent.setType("plain/text"); 
    return emailIntent; 
    } 
    else if(textViewContents.equals(getString(R.string.info_terms)){ 
    return new Intent(InfoActivity.this, TermsActivity.class); 
    } 
    else if(textViewContents.equals(getString(R.string.info_privacy)){ 
    return new Intent(InfoActivity.this, Privacy.class); 
    } 
    else{ 
    return null; 
    } 
} 

참고 :이 방법은 downf 모두. 당신이 당신의 ListView에 다른 아이템들을 추가하기 시작한다면 당신은 당신의 getIntentForString() 메소드를 성장시키고 키울 필요가있을 것입니다. 지금 당장은 이것으로 충분할 것입니다. ListView에 더 많은 옵션을 추가하면 더 복잡한 접근 방식을 취할 수 있습니다.

+0

굉장한 것들! :-) getIntentForString() 메소드에 대한 예제를 주시겠습니까? switch 문()과 각 경우마다 새로운 의도 (InfoActivity.this, AboutActivity.class)를 생각했습니다. 메일 방법을 호출하고 싶다면 다른 수업을 들어야합니까? 또는 동일한 클래스 내에서 메소드를 호출하거나 단순히 다른 클래스를 만들 수 있지만 자연스럽게 활동에서 상속받지 않는 클래스 (이 경우 GDListActivity)를 만들 수 있습니까? – SpacialWise

+0

답변이 업데이트되었습니다. –

+0

대단하군요! 감사합니다 커티스! 더 많은 점수를 남길 수있는 방법이 있습니까? 나는이 사이트가 어떻게 작동하는지 모르겠다. 대답을 수락했다. – SpacialWise

관련 문제