有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android调用方法而不是类sdk

我的主要应用程序类如下所示,我想知道的是如何将一行更改为从同一个类或另一个类调用方法,而其他的仍然调用活动。代码如下:

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);
}
}

所涉行:

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

我想调用一个方法,作为一个示例,该方法执行以下操作:

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

现在我在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) 个答案

  1. # 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,因为对使用带有字符串的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;
      }
    }
    

    注意,这种方法有一个缺点。如果您开始向ListView添加一堆不同的项目,您将需要不断扩展getIntentForString()方法。但就目前而言,这应该足够了。如果您发现自己在ListView中添加了更多选项,那么我们需要采用更复杂的方法