2011-10-29 13 views
1

私は私の主なアプリケーションクラスを次のようにしています。私は、同じクラスまたは別のクラスからメソッドを呼び出すように1行を変更する方法を知りたいと思います活動。今、私はこれを持ってAndroid - クラス - 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)); 

は、彼らは、機能の面で同じまますることができます。この質問は、この1(私が以前に尋ねたと答えてしまった)からの補遺です:

あなたがこれについて行くことを選択し、これまで、トリックは実際にするときに何をすべきかについての意思決定を移動することですどのように

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文()とそれぞれの場合について考えていました:new Intent(InfoActivity.this、AboutActivity.class);メールメソッドを呼びたいと思ったら別のクラスに入る必要がありますか?または同じクラス内からメソッドを呼び出すことも、別のクラスを作成することもできますが、自然にアクティビティを継承しないクラス(この場合はGDListActivity)を作成できますか? – SpacialWise

+0

これに対処するための答えが更新されました。 –

+0

それは素晴らしいです!ありがとうKurtis!あなたにもっと多くのポイントを残す方法はありますか?私はこのサイトがどのように動作するかわかりません。私は答えを受け入れました.. – SpacialWise

関連する問題